网络:TCP 与 UDP 协议简介

  • 传输层的主要作用是实现应用程序之间的的包传递。网络层主要是保证不同数据链路的包传递,至于如何传输数据则是由传输层负责。

传输层协议简介

  • 常见的传输层协议主要有 TCP 协议和 UDP 协议

  • TCP 协议是面向有连接的协议

    • 使用 TCP 协议传输数据之前一定要在发送方和接收方之间建立连接。一般情况下建立连接需要三步,关闭连接需要四步

    • 建立 TCP 连接后,由于有数据重传、流量控制等功能,TCP 协议能够正确处理丢包问题,保证接收方能够收到数据,与此同时还能够有效利用网络带宽。然而 TCP 协议中定义了很多复杂的规范,因此效率不如 UDP 协议,不适合实时的视频和音频传输。

  • UDP 协议是面向无连接的协议

    • 它只会把数据传递给接收端,不会关注接收端是否真的收到了数据。
    • 这种特性反而适合多播,实时的视频和音频传输。因为个别数据包的丢失并不会影响视频和音频的整体效果。
  • IP 协议中的两大关键要素是源 IP 地址目标 IP 地址。而刚刚我们说过,传输层的主要作用是实现应用程序之间的通信。因此传输层的协议中新增了三个要素:源端口号目标端口号协议号。通过这五个信息,可以唯一识别一个通信。

  • 端口用于区分同一台主机上不同的应用程序

    • 假设你打开了两个浏览器,浏览器 A 发出的请求不会被浏览器 B 接收,这就是因为 A 和 B 具有不同的端口。
  • 协议号用于区分使用的是 TCP 还是 UDP

    • 因此相同两台主机上,相同的两个进程之间的通信,在分别使用 TCP 协议和 UDP 协议时也可以被正确的区分开来。

TCP的三次握手

第一次握手:
  • 客户端发送 SYN包 到服务器,进入数据发送(SYN_SEND)状态,等待服务器确认
第二次握手:
  • 服务器发送 SYN+ACK(确认)包,此时服务器进入 数据接收(SYN_RECV)状态
第三次握手:
  • 客户端发送ACK(确认)包,客户端和服务器进入建成状态

established: 已经建立的

  • 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据
  • 理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去
为什么是三次握手
  • 网络不可靠,数据包可能丢失。

  • 假设没有第三次确认,客户端发送了 SYN,请求建立连接。由于延迟,服务端没有及时收到这个包。于是客户端重新发送一个 SYN 包。服务端接收到了第二个 SYN 包,建立了通信,一段时间后通信结束,连接关闭。这时候第一次发送的 SYN 包抵达服务端,此时的服务端就会建立一个新的连接。然而客户端并没有请求建立连接,所以也不会向服务端发送数据。造成资源浪费

  • 在三次握手的情况下,客户端会接受到一个相同的 ACK 包,这时候它会抛弃这个数据包,不会和服务端进行第三次握手,因此避免了服务端建立空的连接

  • 三次握手其实解决了第二步的数据包丢失问题

ACK 确认包丢失怎么办

  • 方案一:服务端会重新向客户端发送数据包,直至收到 ACK 包

    • 但这种做法有可能遭到 SYN 泛洪攻击
    • 所谓的泛洪攻击,是指发送方伪造多个 IP 地址,模拟三次握手的过程。当服务器返回 ACK 后,攻击方故意不确认,从而使得服务器不断重发 ACK。由于服务器长时间处于半连接状态,最后消耗过多的 CPU 和内存资源导致死机
  • 方案二:服务端发送 RST 报文,进入 CLOSE 状态;客户端如果还想重新建立 TCP 连接,就必须重新开始第一次握手

    • 这个 RST 数据包的 TCP 首部中,控制位中的 RST 位被设置为 1。这表示连接信息全部被初始化,原有的 TCP 通信不能继续进行

TCP关闭的四次握手

服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”

1.(客户端):我要关闭了
2.(服务端):可以
3.(服务端):我这边也要关闭了
4.(客户端):可以

关闭连接的最后一个 ACK 丢失怎么办

  • 第三步之后客户端收到 FIN 包时,会设置一个计时器。如果ACK 丢失,那么服务端还会重发 FIN ,客户端重置计时器
  • 假设在计时器失效前服务器重发的 FIN 包没有到达客户端,客户端就会进入 CLOSE 状态,从而导致服务端永远无法收到 ACK 确认,也就无法关闭连接

TCP和UDP的区别

1.TCP面向链接,UDP非面向连接
TCP的三次握手最大程度保证了,数据传输的可靠性

2.UDP数据传输速率更快
因为不必进行三次握手

建立Socket连接

  • 建立 Socket 连接至少需要一对套接字:客户端Socket,服务器端Socket
  • 套接字:源IP地址和目的IP地址以及源端口号和目的端口号的组合
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容

  • 参考:http://www.2cto.com/net/201611/569006.html TCP HTTP UD...
    F麦子阅读 2,947评论 0 14
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,053评论 0 8
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,062评论 6 174
  • 18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将...
    张芳涛阅读 3,371评论 0 13
  • 从本节开始,我们开始学习最重要的传输层。传输层位于OSI七层模型的第四层(从下往上)。顾名思义,传输层的作用是实现...
    doudo阅读 934评论 0 1