TCP与UDP
IP提供了点到点的连续接,通过IP地址可以找到目标主机。但是目标主机有很多应用,服务器到底使用哪个应用来响应客户端?通过端口号决定。一、TCP:transmission control protocol--传输控制协议
可靠的,面向连接的协议,就像拨打电话号码拨通后和同伴沟通,需要建立连接,发送数据,断开连接,网络中大部分是TCP ,重要的数据传输也是TCP
1.TCP的封装格式
目标端口号:表明要访问的哪个应用,如80端口表示http
源端口号:标识自己的应用
序列号:上层数据被分成很多段,段的编号
确认号:接收方收到数据段后,要告诉发送方已收到
窗口大小:接收方告知发送发一次可以发多少个段
2.三次握手:TCP建立连接的过程
(1)发送方A发送SYN=1的数据段给接收方B SYN:synchronize 同步
(2)B回应SYN=1,ACK=1的数据段给A ACK:acknowledge 确认
(3)A发送ACK=1的数据段给B
3.四次断开:TCP发送完数据后,断开连接的过程有4步
(1)主机A发送FIN=1的数据段给对方B FIN:final 最终
(2)另外一方B回应ACK=1的数据段给A
(3)B也发送FIN=1的数据段给A
(4)A回应ACK=1的数据段给B
4.TCP的流控机制:(1)滑动窗口--窗口大小是变化的,接收方可以告诉发送方发送几个窗口,若自己接收不了,也可以随时告知发送方更改发送窗口数。
(2) 拥塞控制--口语来说就是有个希望接收值和实际接收值,比如希望传输10个窗口,但实际链路带宽较窄时,传输变为5
(3)方式:A 发送方发送数据有编号,接收方确认号是发送编号加1。如,发送100,接收方确认101。
B:如果发送方发送100、101、102,接收方全部接收后,采用累计确认方式。确认103,意思是100-102全部接收到。发送方收到103确认,那么它认为103之前的数据已全部接收到了。
C:发丢谁确认谁:如果发送方发送100、101、102,接收方收到了100和102,接收方不能确认103,因为一旦确认103,就表示全部收到,所以它要确认101。
5.TCP的差错控制
(1)校验和:其实就是个校验工具,每个文件通过校验工具计算都会有个固定的校验码,如果文件有变化,哪怕小小的标点,校验码都会千差万别,用来检验数据是否有损坏或丢失
(2)确认:接收方明确告知发送方数据已收到,同上面的发送方式
(3)超时:如果发送方长时间没有收到确认,将会重发
6.TCP四个计时器
(1)重传计时器:与上面的超时有关系
(2)坚持计时器:防止零窗口死锁问题 例:A给B发数据途中,B说先不要发,等B忙好说让A发三个数据,但发丢了,出现A没收到一直在等待,B在等A发数据,所以发送方A就会定期隔一段时间给B发个消息说还在等待,B就会重发一遍
(3)保活计时器:防止两个TCP连接之间长时间的空闲 如果服务器发现客户端在一定时间内没有数据传输,则终止连接,否则会白白占用资源
(4)时间等待计时器:用在四次断开。主机A请求断开连接,B回应可以断开。A收到消息,等一会才真正断掉。
7.TCP的应用
二、UDP:user datagram protoco--用户数据报协议
不可靠的,非面向连接的服务,就像发qq消息,不用先连接通就可以发消息,但对法收没收到不知道,简单的域名解析属于UDP的服务
1.封装格式
2.UDP的应用
3.UDP的流控与差错控制
UDP没有流控机制
只有校验和来提供差错控制--需要上层协议来提供差错控制:例如TFTP协议