Tcp与Udp的浅谈
Tcp: (Transmission Control Protocol 传输控制协议)
- 是一种面向连接、可靠、基于字节流的传输层通信协议,面向连接以为着使用tcp的应用(通常是一个客户和服务器)tcp通过检验、序列号、确认应答、重发控制、链接控制、链接管理以及窗口控制等机制实现可靠的数据传输
Udp:(user datagram protocol 用户数据报文传输协议)
- 是一种面向事物的简单不可靠信息传送服务,udp提供了无连接通信,且不对传送数据进行可靠性的保证,适用于一次且少量的数据,且不提供复杂的控制机制,利用面连接的通信服务。并且他是应用将应用程序发来的数据在收到的那一刻,立刻按照鸳鸯发送到望楼上的一种机制。及时是出现网络拥堵的情况下,udp不负责重发,就易导致丢包的情况
- 两者区别
- 一个基于有连接、一个基于无连接
- Tcp要求系统的资源较多、udp则较少
- UDP程序结构简单
- 流模式(tcp)与udp的数据报模式
- Tcp保证数据传输正确性,udp则易丢包
- Tcp在数据传输过程中会保证数据顺序,udp不会
基于tcp/IP 三次握手 四次的过程 浅谈
SYN(synchronous 建立联机) 发起一个新连接
ACK(acknowledgement 确认) 确认序号有效。
PSH(push 传送) 接收方应该尽快将这个报文交给应用层。
FIN(finish 结束) 释放一个连接。
RST(reset 重置) 重置连接。
URG(urgent 紧急) 紧急指针(urgent pointer)有效
Sequence number( 顺序号码) Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
Acknowledge number(确认号码) Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
- 第一次握手:主机a发送位码syn=1,即随机产生seq number=1233 的数据包发送至服务器,有服务器解析后一个叫syn=1 主机请求连接
- 第二次握手:主机b收到连接确认信息信息,即向a 发送 A出口number=(主机的seq+1),SYN=1,ack=1随机产生seq=76543的包
- 第三次握手:主机a 收到后检查 A ack number是否正确,即第一次哦发送的 seq number +1 以及位码a的ck是否为1 若正确,主机a在发送ack number=(主机bd seq+1),ack=1,主机b 收到确认seq值与ack=1 若确认无误后连接,即客户端与服务器连接开始传输数据
- 由主机a发送一个FIN,发送一个结束传输数据的信息
- 服务器b 收到这个FIN,即会发回一个ack 确认信息 ,确认序号为为收到的序号+1
- 服务器b 关闭与客户端a 的连接,会发送一个FIN给客户端a
- 客户端a 收到FIN后发回ACK 报文确认,并确认序号设置为收到序号+1
关闭连接
为什么建立三次握手和四次挥手:
三次握手:
这是因为服务端的listen(监听)状态下的socket当收到 syn 报文的连接请求,把ack(应答)和syn(同步)会放在一个报文里回发到服务器。服务器确认目标请求客户端存在且正等待连接后作应答回发确认信息,客户端在接受到服务器后即请求成功可以连接。
四次握手:
当数据传输完毕后,当服务器收到对方发送到FIN(数据传输完毕,请求关闭连接),仅仅代表数据传完,而数据完整性不可知。即服务器会发送ACK 和 FIN,确认收到关闭请求,且发送确认号码,客户收到ack确认号码 即关闭连接。