区别:
TCP:面向连接,稳定,慢
UDP:无连接,不稳定,快
①、TCP将若干字节构成一个分组,叫报文段(Segment)
②、TCP报文段封装在IP数据报中
1.1 工作在传输层
1.2 面向连接协议
1.3 全双工协议
1.4 半关闭
1.5 错误检查
1.6 将数据打包成段,排序
1.7 确认机制
1.8 数据恢复,重传
1.9 流量控制,滑动窗口
1.1 端口号:区别应用程序(区别7层协议tcp/80(http)、tcp/443(https)、udp/69(tftp))
端口号范围:0~65535
应用层:应用程序
传输层:协议/端口号 tcp/80(80端口代表七层协议,http协议),协议要靠程序来实现(端口号不可以重复使用,一个端口号只能被一个程序占用)
1.2 序号:发送端为每个字节编号重组,便于接收端正确重组
1.3 确认号:用于确认发送端的信息(告诉对方我收到了你的消息,确认机制)
1.4 首部长度:IP头部,tcp头部(确定首部数据结构的字节长度)
1.5 控制位:描述了AB两台设备目前处于什么状态
tcp协议先要建立连接
A —————》 B
①、没有建立连接
②、已建立连接
③、断开连接
1.6 滑动窗口(窗口大小):调节每次发送的数据包量
1.7 校验和:提供额外的可靠性紧急指针,标记紧急数据在数据字段中的位置
网络环境复杂,为了确保数据能够到达,两次不够,四次多余,三次正好
当pc1想和pc2建立起连接 将连接信息写入报文
第一步 :pc1会发送一个建立连接的请求报文,报文包括:
①、报文的序号(seq=x)
②、同步位(请求建立连接关系: SYN=1 ACK=0 控制位:当前两台设备处于什么状态? 建立连接、处于连接、断开连接 )
第二步:当pc2收到消息以后,要回复一个报文
①、报文的序号(seq=y)
②、ack确认号( 我希望你下一次发送x+1序号的报文给我)
③、控制位SYN=1,ACK=1请求建立连接,pc2同意建立连接
第三步:收到 pc2 同意建立连接的报文后
1.会发送一个x+1报文
2.会告诉对方我希望你下次发送y+1的序号报文给我
3.最后将ACK=1 封装进去,告诉你收到了你的同意请求并且我也统一和你建立连接
①、主动关闭方发送FIN:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT_1 状态。
–即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。
②、被动关闭方回复ACK:服务端收到 FIN 之后,会发送 ACK =1报文,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。
–即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT_2(终止等待2)状态,等待服务端发出的连接释放报文段。
③、被动关闭方发送FIN:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
–即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。
④、主动关闭方回复ACK,关闭连接:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
–即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。
有限状态机:
客户端先发送一个FIN给服务端,自己进入FIN_WAIT_1状态,这时等待接收服务端报文,该报文会有三种可能:
端口 | 协议 | 说明 |
---|---|---|
21 | FTP | FTP服务器所开放的控制端口 |
23 | TELNET | 用于远程登录,可以远程控制管理目标计算机 |
25 | SMTP | SMTP服务器开放的端口,用于发送邮件 |
80 | HTTP | 超文本传输协议 |
110 | POP3 | 用于邮件的接收 |
telnet协议:明文传输,远程管理协议。探测远端服务器的端口是否打开
命令: telnet IP地址 端口号:服务软件是否正常
端口 | 协议 | 说明 |
---|---|---|
69 | TFTP | 简单文件传输协议 |
111 | RPC | 远程过程调用 |
123 | NTP | 网络时间协议 |