🌐 TCP连接的建立与释放

计算机网络分层结构:

  • 7层OSI参考模型(法定标准)
  • 4层TCP/IP参考模型(事实标准)

标准化工作

计算机网络的标准化工作之标准的分类:

  • 法定标准:由权威机构制定的正式的、合法的标准:OSI
  • 事实标准:某些公司的产品在竞争中占据了主流,时间长了这些产品中的协议和技术就成了标准:TCP/IP

OSI参考模型(法定标准)

OSI七层模型,由ISO(国际标准化组织)指定制定的一个国际标准OSI(Open System Interconnect 开放式通信系统互联参考模型)。常用来分析和设计网络体系结构。

TCP/IP参考模型(事实标准)

OSI与TCP/IP.png
ISO/OSI参考模型 TCP/IP参考模型
网络层 无连接+面向连接 无连接
传输层 面向连接 无连接+面向连接

面向连接 分为三个阶段,第一是建立连接,在此阶段,发出一个建立连接的请求。只有在连接成功建立之后,才能开始数据传输,这是第二阶段。接着,当数据传输完毕,必须释放连接。
面向无连接 没有这么多阶段,直接进行数据传输。

5层参考模型

综合OSI和TCP/IP的优点


5层参考模型.png

传输层

传输层的功能:

  1. 传输层提供 进程和进程 之间的逻辑通信。网络层提供 主机之间 的逻辑通信;
  2. 复用和分用;
  • 复用:应用层所有的应用进程都可以通过传输层再传输到网络层;
  • 分用:传输层从网络层收到数据后交付指明的应用进程;
  1. 传输层对收到对报文进行差错检测;

传输层的两个协议

TCP

面向连接的传输控制协议TCP。传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。
由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销:确认、流量控制、计时器及连接管理等。
特点:可靠,面向连接,时延大,适应于大文件

  • TCP是面向连接的传输层协议;
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的;
  • TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达(可靠有序,不丢不重);
  • TCP提供全双工通信,即发送方和接收方可以同时发送和接收;

发送缓存:准备发送的数据&已发送但尚未收到确认的数据
接收缓存:按序到达但尚未被接受应用程序读取的数据&不按序达到的数据

  • TCP面向字节流,TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流;

UDP

无连接的用户数据报协议UDP。传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认。
特点:不可靠,无连接,时延小,适用于小文件

  • UDP是无连接的,减少开销和发送数据之前的时延;
  • UDP使用最大努力交付,即不保证可靠交付
  • UDP是面向报文的,即应用层给UDP多长的报文,UDP就照样发送,即一次发一个完整报文,适合一次性传输少量数据的网络应用;
    UDP传输.png
  • UDP无拥塞控制,适合很多实时应用;
  • UDP首部开销小,8B,TCP是20B;

TCP

TCP报文段首部格式

TCP报文段首部格式.png
  • 序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的 第一个字节的序号
  • 确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到。
  • 数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B位单位,即1个数值是4B。
    6个控制位:
  • 紧急位URG:URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用。
  • 确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1;
  • 推送位PSH:PSH=1时,接收方尽快交付应用程序,不再等到缓存填满再向上交付;
  • 复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接;
  • 同步位SYN:SYN=1时,表明是一个连接请求/连接接受报文;
  • 终止位FIN:FIN=1时,表明此报文段发送方数据已发完,要求释放连接。
  • 窗口:指发送本报文段的一方的接收窗口,即现在允许对方发送的数据量;
  • 检验和:检验首部+数据,检验时要加上12B伪首部,第四个字段为6;
  • 紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数;
  • 选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认...

TCP连接建立(三次握手)

三次握手.png

TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。
TCP连接建立.png

  • 客户端发送 连接请求报文段,无应用层数据 SYN=1(连接请求报文),序号位seq=x(随机)
  • 服务端为该TCP连接 分配缓存和变量,并向客户端返回 确认报文段,允许连接,无应用层数据 SYN=1(连接接收报文),ACK=1,seq=y(随机),确认号ack=x+1
  • 客户端为该TCP连接 分配缓存和变量,并向服务器返回确认的确认,可以携带数据 SYN=0,ACK=1,seq=x+1,ack=y+1

SYN洪泛攻击

SYN洪泛攻击发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器资源。
攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。
解决方案:设置SYN cookie

为什么TCP一定要握手三次?

通过三次握手,客户端经历了一次请求和一次响应,服务端也经历了一次请求和一次响应,这时一方面确认了当前网络状态不错,另一方面又确认了自己这个沟通对象既能请求又能响应、确实没毛病。只有在这样安全、稳定的前提下,两台计算机之间才可以建立起 TCP 连接。三次握手的目的是为让双方验证各自的接收能力和发送能力,确保双方能够确实建立起稳定的传输通道。

TCP连接释放(四次挥手)

四次挥手.png
TCP连接释放.png
  • 客户端发送 连接释放报文段,停止发送数据,主动关闭TCP连接 FIN=1,seq=u
  • 服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了--半关闭状态 ACK=1,seq=v,ack=u+1
  • 服务端发完数据,就发出连接释放报文段,主动关闭TCP连接 FIN=1,ACK=1,seq=w,ack=u+1
  • 客户端回送一个确认报文段,再等到时间等待计时器设置的2MS(最长报文段寿命)后,连接彻底关闭 ACK=1,seq=u+1,ack=w+1

为什么TCP分手一定要挥手四次?

TCP连接是全双工协议,就是说双方都可以同时向对方发送或接收数据。
当客户端在想要断开连接时,只能确认自己没有数据要传输给服务器了,但并不能确认服务器是否还有数据要发送。
分手嘛,是两个人的事情。客户端不会因为自己没话说了就直接终止关系,而是会等服务器把话说完再走。因此,即便客户端抛出了分手请求,这时服务器还是可以传输数据过来的。
前两次挥手,只是对分手这件事做确认,但并不会立即行分手之时。
第三次挥手前,服务器会把自己想说的话说完,然后再通知一次客户端。这时,双方才真正都为分开做好了准备。
第四次挥手,客户端接收到了来自服务端的分手请求,响应“接受”的信号,才最后给这一段关系画上了句号。

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