Tcp/ip协议

Tcp/ip协议

Tcp:

1.传输控制协议
2.可靠的,面向连接的协议
3.传输效率低
because每次发送的请求报文都需要回应,So 安全且低效
TCP 支持的应用协议主要有:Telnet,FTP,SMTP等

UDP:

1.用户数据报协议

2.不可靠,无连接的服务
3.传输效率高
because每次发送的请求报文都不需要回应,So 不安全但高效
UDP 支持的应用协议主要有:NFS(网络文件系统),SNMP(简单网络管理协议)
DNS(主域名称系统),TFTP(通用文件传输协议)等

 

TCP是 面向连接的协议,也就是说在收发数据之前,必须先和对方建立连接
认识主要指针:
a.同步指针SYN:建立连接时用来同步序号
   SYN=1 ACK=0 表示一个请求报文段
   SYN=1 ACK=1 表示同意建立连接
b.确认指针ACK:ACK=1时表示这是一个确认的Tcp包,0则不是,
  只有在第一个建立的报文中不会出现ACK
  c.终止指针FIN:FIN=1时,表示此报文段的发送端数据已经发送完毕,并要求释放传输连接

*****三次握手四次挥手:

三次握手建立连接:

1.第一次对话:“我想给你发送数据可以吗?”

   a. A向B发出连接请求数据包
   SYN=1 ACK=0 seq=x

2.第二次对话:“可以,你什么时候发?”
   b. B向A发送同意连接和要求同步
   SYN=1 ACK=1 seq=y ack=x+1

3.第三册对话:“我现在发,你接着吧!”
    c. A再发出一个数据包向B确认同意的要求同步
    ACK=1 seq=x+1 ack=y+1

———— 三次对话的目的是使数据发送和接受同步,三次握手后,
A才向B正式发送数据

四次挥手释放连接:

当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),
其中 FIN 设置为1, 服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,
即A不再发送信息(但仍可接收信息)。 A收到B的确认后进入等待状态,等待B请求释放连接,
B数据发送完成后就向A请求连接释放,也是用FIN=1 表示, 并且用 ack = u+1(如图),
A收到后回复一个确认信息,并进入 TIME_WAIT 状态, 等待 2MSL 时间。

为什么使用三次握手?

1. 一次握手,不够安全,服务端不知道是否收到
2. 两次握手,服务端发出消息后,如果客户端没有收到,就会产生资源浪费
3. 三次握手,服务端和客户端都进行了确认,可以直接开始连接

为什么使用四次挥手?

1. 一次挥手直接断开,可能会导致数据丢失
2. 两次挥手,可能会面对数据传输未完成
3. 三次挥手如果还有要传输的会有缓冲时间,但服务端不知道对方是否收到消息
4. 四次挥手,双方都确认过,可以断开连接

posted on   烟嗓  阅读(140)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示