网络编程(一)

  大家都知道在网络上有两种角色,一个是服务器,另外一个是客户端,那么什么是服务器,什么又是客户端呢?客户端和服务器如何进行通信的呢?接下来我就给大家简单讲一讲网络上通信的过程。

  服务器(server):提供数据的为服务器

  客户端(client):获取数据的为客户端

  在之前的学习中,我们知道了网络的分层,有两种模型分别是OSI模型和TCP/IP模型,我们一般讲的是后者。TCP/IP模型共有四层,它们分别是(从上到下):应用层、传输层、网络层、数据链路层。传输层协议主要有两种:TCP和UDP。网络层主要协议是:IP。接下来说的TCP协议就是传输层的一种重要协议。

  TCP协议是传输层协议的一种,它的特点是面向连接的、可靠地、流式服务。

  TCP的编程流程:

    服务器:socket、bind、listen、accept、 recv/send 、close

    客户端: sockfd 、 /*bind*/、connect、recv/send、close

  TCP报头:

  

  端口号:告诉主机该报文段是来自哪里(源端口)以及传给哪个上层协议或应用程序(目的端口)的。

  序号:一次TCP通信过程中某一传输方向上的字节流的每个字节的编号。假设主机A和主机B进行TCP通信,A发给B的第一个TCP报文段中,序号值被系统初始化为某个随机值ISN(初始序列值)。那么在该传输方向上,后续的TCP报文段中序号值将被系统设置成ISN加上该报文段所携带数据的第一个字节在整个字节流中的偏移。例如,某个TCP报文段传送的数据是字节流中的第1025~2048字节,那么该报文段的序号值就是ISN+1025。

  确认号:用作对另一方发送来的TCP报文段的响应,其值是收到的TCP报文段的序号值加1。

  头部长度:4位最大能表示到15,所以TCP头部最长是60字节。

  6位标志:

     URG-紧急指针是否有效。

     ACK-确认号是否有效,携带ACK标志的报文段称为确认报文段。

     PSH-表示接收端应用程序应该立即从TCP接受缓冲区中读走数据,为接收后续数据腾出空间。

     FIN-表示通知对方要关闭连接了。

     SYN-表示请求建立一个链接。

     RST-表示要求对方重新建立链接。 

  窗口大小:运用流量控制的手段,告诉对方本端的TCP接收缓冲区还能容纳多少 字节的数据,这样对方就能控制发送数据的速度。

  校验和:发送端填充,接收端运用CRC算法对其进行检验TCP报文段在传输过程中是否有损坏。注意,这个检验包括头部和数据部分。

  紧急指针:正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。

  1、TCP的面向连接

     (1)三次握手建立连接

  

    说明:客户端向服务器发送一个SYN链接请求,服务器收到请求后,连着同意SYN和一个确认ACK一起发送给客户端,客户端收到后再给服务器发送一个ACK的确认报文,表明自己收到了服务器发送的报文。

    注意:三次握手建立连接的过程最少限度是三次。如果是两次(缺少第三次),服务器没有收到客户端的ACK,就会重发之前发的报文,重发次数达到一定之后,服务器就会放弃这次链接,那么本次建立链接就会失败。

   (2) 四次挥手断开链接

 

   说明:当客户端需要断开链接时,客户端向服务器发送一个FIN,请求断开链接,服务器收到请求,发送ACK同意客户端断开链接。此时,服务器可能还有数据需要处理,所以会有处理数据的时间,当数据处理完之后,服务器向客户端也发送一个FIN请求断开链接,然后客户端发送ACK同意断开链接。所以此时,断开链接需要四次挥手。有时候,三次挥手也是可以的,如下图。

    

    当服务器收到客户端发来的FIN断开链接请求时,它自己没有数据需要处理,所以就会将ACK连着FIN一起发送给客户端,客户端收到以后,就直接发送ACK,然后双方断开链接。

     (3)三次挥手和四次握手状态图

 

    如上图所示,是TCP连接的建立和断开过程中客户端和服务器的状态变化。其中比较重要的一个状态是TIME_WAIT。

    TIME_WAIT状态:出现在主动发起断开链接请求的一端。

    作用:1、保证可靠的终止TCP链接。如果在四次挥手过程中,服务器向客户端发送FIN后,客户端收到之后向服务器发送ACK后直接关闭,那么一但服务器没有收到ACK的话,就一直等待最后一个ACK,而此时客户端已经关闭了,那么就造成此次链接没有成功的关闭。

               2、保证迟来的数据报能够识别并丢弃。在数据还在传输的同时,某一方发送的断开链接请求可能会比数据早到达,那么此时就需要接受的这一方对数据进行分析,如果不需要就丢弃。TIME_WAIT状态有效的解决了这一问题。

  2、可靠性

    由上面TCP报头结构可知TCP的可靠性:

    (1)32位序号-保证数据有序

    (2)32位确认号和超时重传-保证报文段不会丢失

             超时重传:TCP服务必须能够重传超时间未收到确认的TCP报文段。所以在每个TCP报文段都有一个重传定时器。该定时器在TCP报文段第一次被发送时启动。如果超时时间内未接收到对方的应答,TCP模块将重置定时器,再次重发数据。如果在超时时间内接收到了对方的应答,那么定时器将会被丢弃。

    (3)16位窗口大小-保证空间大小和数据大小相符合,报文段能全部被接受

    (4)16位检验和-保证数据准确,不会失真

  3、流式服务(数据流服务)

 

  如上图所示,是TCP流式服务的示意图。从图中可以看出,有TCP发送缓冲区和TCP接收缓冲区。发送端发送多个数据到发送缓冲区,接收端从接收缓冲区中取数据时,可能一次性把缓冲区中所有的数据全部获取,那么就是n->m的关系,提高了效率。

  综上所述,就是关于TCP的相关知识。

  

   

   

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值