Linux下的socket应用——TCP和UDP

1.前言

        TCP和UDP是两种最重要的传输协议,也是应用最广泛的传输协议,想要做服务器,就必须要学习和了解这两种传输协议,这里厚着脸皮从别人博主这里扒下来的知识点,先感谢一下这两个博主的分享。其实TCP和UDP拿出任何一个协议来讲都是需要长篇大论的,因为我们是由浅入深的学习,等碰到问题再去针对性的学习,所以这里只讲一下基本的概念,只要知道个大概就足够了。本文引用了下面链接中的内容。

       TCP和UDP的区别

        TCP的三次握手和四次挥手(图片案例超详解)

2.TCP和UPD

①TCP

        TCP也就是传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

        基于流的方式(字节流的传输方式)

在这里插入图片描述

        面向连接(数据传输的时候要先建立链接)

在这里插入图片描述

        可靠的通信方式(严格按照顺序传输,不会丢包)

在这里插入图片描述

      复杂的数据包

       在这里插入图片描述

②UDP

        UDP 也就是用户数据报协议(UDP,User Datagram Protocol)是一种支持无连接的传输协议,UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。吞吐量不受协议控制(传输的速度只受应用,带宽,性能控制)

        无连接的协议(传输数据,源端和终端不需要建立连接)

在这里插入图片描述

        无需维护状态,不可靠的协议(只管发送,不管是否能接受,是否掉包,是否送达)

在这里插入图片描述

数据包小(数据包只有8个字节,相对于TCP的20个字节来说,节约了很多没必要的开销)

在这里插入图片描述

   三.TCP的应用

        我们准备写的是基于TCP协议服务器,这里重点讲一下TCP的数据传输流程

       ①TCP的连接

         TCP是一种面向连接的,可靠的基于字节流的通信协议,数据的传输要建立在连接的基础上,传输完成后还要断开连接。

         客户端在接受数据钱要使用connetct()函数和服务器建立连接。建立连接的目的是保证IP地址,端口,物理链路正确无误,为数据的传输开辟通道。

        TCP的建立连接要传输三个数据包,俗称三次握手。

        在这里插入图片描述

         ②TCP的数据报

        在这里插入图片描述

        序号:Seq(Sequence Number)序号占32位,用来标识从计算机A发送到计算机B的数据包序号,计算机发送数据时对此做出标记。

        确认号:Ack(Acknowledge Number)确认号占32位,客户端和服务器都可以发送,Ack = Seq+1。

        标志号:每个标志号占1位,一共有6个。

        URG:紧急指针(urgent pointer)有效

        ACK:确认需要有效

        PSH:接收方应该尽快将这个保温交给应用层

        SYN:建立一个新的连接

        SIN:断开一个连接。

        ③TCP的三次握手

        首先client端发送连接请求报文;server端接收到连接后回复ACK报文,并为这次连接分配资源;Client端接收到ACK报文后也向Server段发送ACK报文,并分配资源,这样TCP连接就建立好了。

        在这里插入图片描述

 ④TCP的四次挥手

        第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

        第二次挥手:Server收到FUIIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。

        第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

        第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入CLOSED状态,完成第四次挥手。

在这里插入图片描述

⑤为什么连接用3次握手,关闭却要用4次挥手?

         因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

四.小结

        只有知道了TCP和UDP的区别,才能更进一步的了解Socket的几个函数和参数的含义。只有多花一些时间去深入理解网络传输的流程和常用的协议,我们才能更好的开发出可靠的,高性能的网络服务器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值