TCP(Transmission Control Protocol)传输控制协议
需要将要传输的文件分段,传输需要建立会话,实现可靠传输,流量控制。发送端发送太快,接收端接收不过来,可以告诉发送端先暂停发送。
UDP(User Data Protocol)用户数据报协议
一个数据包就可以完成数据通信,不分段,不需要建立会话,不需要流量控制,不可靠传输
传输层协议和应用层协议
HTTP=TCP+80
HTTPS=TCP+443
RDP=TCP+3389 //远程桌面
frp=tcp+21
共享文件夹=TCP+445
SMTP=TCP+25 //发邮件
POP3=TCP+110
telnet=tcp+23
sql=tcp+1433
dns=udp+53
服务和应用层协议之间关系
web服务安装后,就是作为web服务器,web服务会使用tcp协议+80端口侦听客户端的请求,会话连接使用另外的端口进行。web服务就相当于我们自己写的socket程序,监听端口,提高web服务。你自己也可以写web服务的。
端口 0~65535
熟知端口 0~1023
登记端口 RDP 1024~49151
客户端端口 49152~65535
传输层为应用程序之间提供端到端的逻辑通信
网络层是为主机之间提供逻辑通信
传输层还要对接收到的报文进行差错检测
传输层提供面向连接和无连接的服务
UDP是无连接的,即发送数据之前不需要建立连接。
UDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
UDP是面向报文的。UDP没有拥塞控制,很适合多媒体通信的要求。
UDP支持一对一、一对多、多对一和多对多的交互通信。
UDP的首部开销小,只有8个字节。
1 TCP是面向连接的传输层协议。
2 每一条TCP连接只能有两个端点,每一条TCP连3 接只能点对点的。
4 TCP提供可靠交付的服务
5 TCP提供全双工通信
6 面向字节流
TCP连接的端点叫套接字(IP地址:端口号)
TCP连接 ::={socket1,socket2}={(IP1:port1),(IP2:port2)}
应用程序把数据放到TCP缓存,TCP从缓存取数据组成数据包
停止等待协议
这种可靠传输协议称为自动重传请求ARQ
接收端只要停止等待时间超过(往返时间+小小时间),就认为没有收到确认,触发重传
发送时间Td很快,大部分时间都是等待时间,信道利用率低。
U=Td/(Td+RTT+Ta)
连续ARQ协议
累积确认
假设A计算机现在发送了56789数据包,B计算机接收到567,89丢掉了。那么B计算机可以确认收到7数据包,A计算机认为B计算机接收到了567,发送窗口可以向右移动到8
SACK:选择性确认,告诉发送端哪一段丢失了,发送端重新发送丢失的那一段
源端口、目标端口
序号:数据部分是整个文件的第几个字节
确认号:要告诉发送端下一个数据部分的开始序号
数据偏移n:数据部分从n4,4位,最大2^4-1=15;154=60,减去固定长度20
URG:紧急发送,不排队。
ACK:0-确认号无效,1-确认号有效
SYN:同步时用,1-发起会话请求,同意会话请求。
PSH:优先接收,不排队
RST:TCP连接出现错误,浏览器中断按钮
Fin:释放连接
窗口:服务器告诉客户端接收缓存多大
检验和:和UDP的一样
紧急指针:当URG=1时起作用,例如紧急指针=50,说明数据部分1~50字节数据是要紧急处理的数据
选项:可以规定最大数据包长度MSS是多少,等
第一次发送还会发送B滑动接收窗口大小,B接收到1234后,回复确认且告诉当前滑动窗口大小
rwnd=0时,B处理不过来,停止接收,从而控制发送端的发送速度,B应用程序可以获取接收到的缓存数据,处理完重新调整rwnd大小。
"拥塞避免"并非指完全能够避免拥塞,是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
传输链接三个阶段:连接建立、数据传送、连接释放。
三次握手的原因:客户端第一次握手阻塞了,没有收到服务器端确认。客户端又发一次握手,这时服务器端收到了并恢复确认进入等待数据,客户端收到确认,如果没有第三次握手,客户端就开始发数据了。但是如果此时阻塞了那个握手到达服务器端,服务器端收到了并恢复确认进入等待数据,但是客户端收到确认但是已经连上了,如果没有第三次握手,服务器就一直等待客户端连接。
所以第三次确认是为了让服务器等待超时后释放连接。
TCP断开连接客户端最后等待2MSL时间是因为,客户端最后发送确认可能会丢,如果丢了服务器会再发一次关闭请求,客户端在等待时间内还可以收到这个请求并回复。不然服务器端会一直发关闭请求。
TCP服务器有一个保活计时器2小时
TCP服务器进程在没收到一个TCP客户端进程数据,就重新设置和启动保活计时器。
保活计时器到时后,TCP服务器就向TCP客户端发送探测报文段,每隔75s发一次,发送10个探测报文段仍没回应,则认为客户端出现故障,关闭TCP链接