传输层是为应用进程间提供逻辑通信。
(1) UDP是无连接的,在传输数据之前不需要建立连接。
(2) UDP是尽最大努力交付的。UDP不提供可靠交付。
(3) UDP是面向数据报的。
(4) UDP支持一对一,一对多,多对一,多对多通信。
(5) UDP不提供拥塞控制。
(6) UDP首部开销小只有8个字节。
源端口 |
目的端口 |
长度 |
校验和 |
源端口:在需要对方回信时选用,不需要时全置0
目的端口:在终点交付时使用
长度:UDP报文的长度(包括首部和数据字段)
校验和:检测用户数据在传输时是否出现错误,出现就丢弃。
(1) TCP是面向连接的,在传输数据之前需要建立连接。
(2) TCP是可靠传输的。
(3) TCP只支持一对一通信。
(4) TCP是面向字节流的。
(5) TCP有拥塞控制
(6) TCP是全双工通信
(7) TCP首部长度是20个字节
源端口号 |
目的端口号 |
||||||||
序号 |
|||||||||
确认序号 |
|||||||||
数据偏移 |
保留 |
URG |
ACK |
PSH |
RST |
SYN |
FIN |
窗口 |
|
检验和 |
紧急指针 |
||||||||
选项(长度可变) |
填充 |
(1) 源端口号和目的端口号与UDP一样。
(2) 序号:TCP连接中传送的字节流,每一个字节都按序号编号。
(3) 确认序号:期望收到对方下一个报文段的第一个字节的序号。
(4) 数据偏移:这个字段实际指出了TCP报文首部长度。
(5) URG:紧急标志位,表示此报文段中有紧急数据,应该快速发送。
(6) ACK:确认序号有效标记位。
(7) PUSH:推送标志位,当两个进程进行通信时,有时需要一端输入一个命令时,立即能够收到对方的响应。
(8) RST:复位标志位,RST=1,表示TCP连接中出现严重差错,需要释放连接,然后重新建立连接。
(9) SYN:在连接建立时用来同步序号
(10) FIN:用来释放连接。
(11) 窗口:指的是对方的接收窗口。接收窗口,是发送方设置发送窗口的依据。
通信双方,发送方A,和接收方B。
停止等待协议:停止等待协议就是,每发送完一个分组就停止发送,等待对方的确认。在确认收到后再发送下一组。
A. 无差错情况:发送方A发送分组M1后停止发送,等待接收方B发送确认信号。接收方B接受到分组M1后,向发送方A发送确认信号。发送方A接受到B的确认信号后,继续发送分组M2。
B. 出现差错情况:接收方B接受到发送A的分组M1,检测出了差错,就丢弃该报文什么也不做。发送方A等待接收方B的确认信息,A只要超过一段时间没有收到接收方B的确认信息,就重新发送分组M1。
C. 确认丢失和确认迟到:接收方B发送的对M1确认信息丢失了,A在超时计时器到期后就重新发送M1分组。接收方B接收到该重复的分组M1将该重复分组丢弃,并且向A发送确认信息。
滑动窗口协议:ARQ
位于窗口内的分组可以被连续的发送出去,而不需要等待对方的确认。连续ARQ协议规定,发送方每收到一个确认信息就向前移动一个分组的位置。接受方一般采用累积确认的方式,不必对收到的分组注意发送确认,而是在接到几个分组后,对按序到达的最后一个分组发送确认信息,表示这个分组之前的所有分组都已到达。
流量控制是让发送方的速率不要太快,让接收方来得及接收。
TCP使用滑动窗口进行流量控制,接收方会向发送方发送一个接收窗口大小。发送方发送的窗口不能超过接收方给出的接收窗口。
TCP连接的建立:三次握手
1) 客户端向服务端发送连接请求,将同步位SYN=1,同时讲seq=x。这时客户端进入SYN-SENT。
2) 服务端接收到客户端的请求,如果同意建立连接,则向服务端发送确认报文。将SYN=1,ACK=1,ack=x+1,seq=y。服务端进入SYN-RCVD。
3) 客户端接收到服务端的报文,还需要向客户端确认。将ACK=1,ack=y+1,seq=x+1。连接建立完成,客户端和服务端进入ESTABLISHED
为什么需要客户端第三次发送确认?
防止失效的信息重新请求连接。客户端向服务端发送连接请求,请求报文在某个网络节点阻塞,客户端超时重传新的连接请求,并建立连接,传输数据完成后。失效的请求报文到达客户端,如果没有第三次客户端的确认。则服务器建立连接后,客户端没有资源传输,这样空的连接就会浪费资源。
TCP连接的释放:四次挥手
1) 客户端向服务端发送连接释放报文,并停止发送数据。将FIN=1,seq=u(等于前 面发送的最后一个字节的序号加1)。进入FINAL-WAIT-1
2) 服务端接受到报文后,发送确认信号,将ACK=1,ack=u+1,seq=v(等于其那面接 受到最后一个字节的序号加1)。进入CLOSE_WAIT状态。这时客户端到服务端 的连接断开。客户端接受到确认信号后进入FINAL-WAIT-2状态。等待服务端 发送连接释放信号。
3) 服务端向客户端发送连接释放报文,将SYN=1,ack=u+1,seq=w。LAST-ACK
4) 客户端接收到服务端的了报文后,向客户端发送确认。将ACK=1,ack=w+1,seq=u+1.进入TIME-WAIT状态。