1.TCP协议UDP协议的说明
TCP:传输控制协议 面向链接网络协议 安全可靠 传输效率低
UDP:用户报文协议 无连接网络协议 安全性不高 传输效率高
(1)TCP协议:理解TCP报文结构
端口范围是:0-65535 2的16次方=65536
分为三大类:1.公认端口 (0-1023)
常用的公认端口有: FTP : 21
TELNET : 23
SMTP : 25
DNS : 53
TFTP : 69
HTTP : 80
SNMP : 161
2. 注册端口:(1024-49151)
3:客户端使用的端口号:49152~65535
(2) 控制位: 数据传输控制管理作用
syn: 请求建立连接控制字段 0无效 1有效
fin: 请求断开连接控制字段 0无效 1有效
ack: 确认控制字段 0无效 1有效
B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。
1)第一次握手:A的TCP客户进程也是首先创建传输控制块TCB,然后向B发出连接请求报文段,(首部的同步位SYN=1,初始序号seq=x),(SYN=1的报文段不能携带数据)但要消耗掉一个序号,此时TCP客户进程进入SYN-SENT(同步已发送)状态。
2)第二次握手:B收到连接请求报文段后,如同意建立连接,则向A发送确认,在确认报文段中(SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y),测试TCP服务器进程进入SYN-RCVD(同步收到)状态;
3)第三次握手:TCP客户进程收到B的确认后,要向B给出确认报文段(ACK=1,确认号ack=y+1,序号seq=x+1)(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。TCP连接已经建立,A进入ESTABLISHED(已建立连接)。
当B收到A的确认后,也进入ESTABLISHED状态。
TCP协议三次握手过程原理
第一次握手: 客户端 --> 服务端 TCP报文 序列号seq=0 syn控制字段=1
第二次握手: 服务端 --> 客户端 TCP报文 序列号seq=0 确认号ack=1 syn控制字段=1 ack确认字段=1
第三次握手: 客户端 --> 服务端 TCP报文 序列号seq=1 确认号ack=1 ack确认字段=1
3. TCP协议四次挥手过程原理
第一次挥手: 客户端 --> 服务端 TCP报文 fin控制字段=1 ack确认字段=1
第二次挥手: 服务端 --> 客户端 TCP报文 ack确认字段=1
第三次挥手: 服务端 --> 客户端 TCP报文 fin控制字段=1 ack确认字段=1
第四次挥手: 客户端 --> 服务端 TCP报文 ack确认字段=1
四次挥手的详述
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
总结:起初A和B处于ESTABLISHED状态——A发出连接释放报文段并处于FIN-WAIT-1状态——B发出确认报文段且进入CLOSE-WAIT状态——A收到确认后,进入FIN-WAIT-2状态,等待B的连接释放报文段——B没有要向A发出的数据,B发出连接释放报文段且进入LAST-ACK状态——A发出确认报文段且进入TIME-WAIT状态——B收到确认报文段后进入CLOSED状态——A经过等待计时器时间2MSL后,进入CLOSED状态。
为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
4.网络重要协议原理
DNS协议原理 建立IP地址和域名对应关系
DNS协议作用: 将域名信息转换为IP地址
DNS层次结构:
www.baidu.com --- www.baidu.com.
. --- 根域名服务器
.com --- 顶级(一级)域名服务器
.baidu --- 二级域名服务器
www --- 主机记录
DNS解析过程:
5.ARP协议原理 : 建立IP地址和mac地址对应关系
ARP原理作用: 记录IP地址和mac地址关系(局域网主机与主机的通讯)
ARP原理说明:
01. 发送ARP请求和回复信息, 获取访问主机的mac地址
02. 构建ARP表 构建IP--mac记录信息
03. 实现减少广播包的产生