传输层协议介绍

目录

传输层

TCP协议

TCP报文段

TCP三次握手

为什么连接的时候是三次握手

TCP四次挥手

关闭的时侯为什么是四次握手?

UDP协议

常用的TCP端口

UDP协议

TCP与UDP的区别


传输层:定义传输数据的协议端口号以及流控和差错校验

主要的协议有:TCP协议,UDP协议

TCP协议

是一种面向连接的、可靠的、基于字节流的传输层通信协议;TCP提供全双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存和接收缓存,用来临时存储数据;说白了TCP的目的就是为了确保数据传输的可靠性,我给你一个数据包,你一定就要收到,收不到的话那么我就会给你重发,直到我超时放弃你了。

TCP报文段

 

源端口号:发送进程的端口号

目标端口号:接受进程的端口号。接受端收到数据段后,根据这个端口来确定把数据送给哪个应用程序的进程

序号:发送端为每个字节进行编号,便于接受端正确重组。当TCP进程接收数据字节时,把它们分片成数据段存储在发送缓存中,并对每一个字节进行编号。当数据到达目的地后,接收端会按照这个序号把数据重新排列,保证数据的正确性。

确认号:对发送端的确认信息。接收端响应消息时将会用它来告诉发送端倪这个序号之前的数据段都已经收到,如确认号是X,就表示X-1个数据段都已经收到。

首部长度:确定TCP首部数据结构的字节长度

保留

控制位:

URG:紧急位。紧急指针有效位

ACK:确认位。只有当ACK=1时,确认序列号字段才有效:当ACK=0时,确认号字段无效。

PSH:急迫位。标志位为1时,要求接收方尽快将数据段送达应用层。

RST:重置位。当RST为1时,通知重新建议TCP连接。

SYN:同步(连接)位。同步序号位,TCP需要建立连接时将这个值设为1。

FIN:断开位。当TCP完成数据传输需要断开连接时,提出断开连接的一方将这个值设为1.

窗口大小:说明本地可接收数据段的数目。这个值得大小是可变的,当网络通畅时接收端相应消息会会将这个窗口值变大以加快传输速度,当网络不稳定时减小这个值可保证网络数据的可靠传输,TCP中的流量控制机制就是依靠变化窗口的大小实现的。
比如下载速度从一开始的几KB逐渐提升到几MB的过程。

校验和:用来做差错控制,字段检验范围包括首部和数据这两部分,数据段在发送和到达目的地时会进行校验和计算,若这两次的校验和一致,则说明数据基本上是真确定,否则将认为数据已被破坏,接收端将丢弃该数据

紧急指针:和URG配合使用,当URG=1时有效。

选项:在TCP首部可以有多达40字节的可选信息。列如:最大报文长度MSS,MSS告诉对方TCP所能缓存接受的报文段字段的最大长度为MSS个字节

TCP三次握手

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN-SENT状态。

首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。

第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s)。同时会把客户端的 ISN + 1 作为ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN-RCVD的状态。

在确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。

第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接。

为什么连接的时候是三次握手

三次握手的目的确认双方的接收与发送能力是否正常避免多次建立重复连接。

第一次握手:客户端发送网络包,服务端收到了。
这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

第二次握手:服务端发包,客户端收到了。
这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

第三次握手:客户端发包,服务端收到了。
这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

因此,需要三次握手才能确认双方的接收与发送能力是否正常四次或多次握手可能导资源的浪费

TCP四次挥手

建立一个连接需要三次握手,而终止一个连接要经过四次挥手。这由TCP的半关闭(half-close)造成的。

TCP 连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务端均可主动发起挥手动作。

第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN-WAIT1 状态。
  即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。

第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE-WAIT 状态。
  即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。

第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST-ACK 的状态。
  即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME-WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
  即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。

关闭的时侯为什么是四次握手

因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,客户端发送完数据请求断开连接,而服务端不一定也同样发送完数据,若同时回ACK和FIN给客户端,断开连接,可能造成数据的损坏;若先发送ACK,再等B的数据发送完了再发送FIN和ACK,就可以保证传输数据的完整性。所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。

UDP协议

UDP协议是无连接、不保证可靠性的传输层协议。发送端不关心发送的数据是否到达目标主机、数据是否出错等,收数据的主机也不会告诉发送方是否收到了数据,他的可靠性由上层协议来保证。传输速度更快,效率更高

UDP数据报分为首部用户数据部分,整个UDP数据报作为IP数据报的数据部分封装在IP数据报中UDP首部有8个字节,由4个字段构成,每个字段都是两个字节

 

源端口号

目标端口号

UDP长度

校验和

数据

 

源端口号(16):发送端的端口号

目标端口号(16):接收端的端口号

UDP长度(16):用来指出UDP总长度,为首部加上数据

校验和(16):用来完成对UDP数据的差错检验,他是UDP协议提供的唯一的可靠机制

常用的TCP端口

端口   协议     说明

20/21  FTP      FTP服务器所开放的控制端口

23     Telnet   用于远程登录,可以远程控制管理目标计算机

25     SMTP     Smtp服务器开放的端口,用于发送邮件

80     Http     超文本传输协议

110    POP3     用于邮件的接收

443    HTTPS    (加密超文本传输协议(企业常用)

67/68  DHCP     动态主机配置协议,67服务端,68客户端

22     SSH      加密安全协议

UDP协议

端口    协议         说明

69       TFTP        简单文件传输协议

119      RPC         远程过程调用

123      NTP         网络时间协议

TCP与UDP的区别

TCP是面向连接的传输控制协议;而UDP提供了无连接的数据报服务。

TCP具有高可靠性,确保数据传输的正确性,不出现丢失或乱序;UDP在传输数据前不建立连接,不对数据报进行检查与修改,无需等待对方应答,所以会出现分组丢失、重复、乱序。

UDP具有较好的实时性,工作效率较TCP协议高。UDP段结构比TCP的段结构简单,因此网络开销也小。

TCP协议传输更加稳定可靠,UDP协议传输效率更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值