热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

计算机网络(四)

运输层运输层协议概述:从IP层来说,通信的俩端是俩个主机,IP数据报的首部明确的标志了俩个主机的IP地址,但严格来说两个主机之间的通信是指两个主机的进程进


运输层

运输层协议概述:

IP层来说,通信的俩端是俩个主机,IP数据报的首部明确的标志了俩个主机的IP地址,但严格来说两个主机之间的通信是指两个主机的进程进行数据的交换。

 

IP协议虽然把分组送到了目的主机,但是这个分组还停留在网络层,并没有交付给主机的进程。

从运输层来说,通信的真正端点是主机的进程,即端到端的通信是应用进程的之间的通信。

 

网络层和运输层的通信区别:

网络层是提供主机之间的逻辑通信,而运输层是提供进程之间的通信,如下图所示:

 

运输层的两种协议:TCPUDP

 

TCP:一条全双工的可靠的信道,面向连接

UDP:一条不可靠的信道,无连接

 

UDP:传送数据之前不需要先建立连接,远程主机在接收到UDP报文后,也不需要给出任何确认。

TCP:传送数据之前必须要先建立连接,数据传送结束后要释放连接,TCP不提供广播和多播服务。

 

端口引入的原因:

在因特网中,用计算机的进程标识符来标志进程是不够的,因为操作系统的不同具备的进程标识符的格式不一样,把进程指明为因特网上通信的最后终点也是不行的,进程是动态创建和撤销的,运输层使用的协议端口号就能很好的解决这一问题。虽然需要通信的是应用进程,但是只要把报文送到目的主机的端口就行,剩下的交由TCP协议来处理。

 

 

 

协议的功能都在协议报文的首部中

UDP报文的首部格式:

 

  1. 源端口和目的端口:

    对方回信要用到;终点交付报文的时候要用到

  2. 长度:

    UDP用户数据报的长度,最小值是8字节(仅有首部)

  3. 校验和:

    检测UDP用户数据报在传输中是否有错,有错就丢弃

 

UDP端口:

当运输层从IP层收到UDP数据报时,根据首部中的目的端口,将UDP用户数据报通过目的端口交付给进程。

   若接收方UDP发现收到的报文中的目的端口号不正确,丢弃报文,并用ICMP发送“端口不可达“差错报文给发送方。

 

UDP校验和:(TCP校验和计算和UDP一样,而IP数据报校验和只检验IP数据报的首部)

   计算校验和时,需要在UDP用户数据报前面加上12个字节的伪首部伪首部:仅仅是为了计算出校验和而临时添加的。

   UDP校验和:首部和数据部分都要一起检验。

 

下图是UDP校验和的计算原理:

 

UDP接收方解码:

   把收到的UDP用户数据报和伪首部,进行二进制反码求这些16bit的和,若结果全为1,表示结果无差错

   5-7中的伪首部和首部可以对照前面的图5-5

 

 

 

 

TCP报文的首部格式:要掌握TCP的工作原理必须掌握TCP首部各字段的作用

 

 

  1. 源端口和目的端口:

    各占2个字节,TCP的分用也是通过端口实现的

  2. 序号:

    4个字节,从0开始编序,序号编号到最后一个,下一个序号又回到0

    TCP连接中传送的字节流中的每一个字节都按顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置。

    首部的序号值,是指本报文段所发送的第一个字节的序号。如:一报文段的序号字段值是301,共100字节,则最后一个字节序号是400,那么下一报文段的序号值是401.

  3. 确认号:

    4个字节,期待收到下一个报文段第一个字节的序号,即上例中,确认号就是401.

    注意:若确认号 = N,则表示到序号N-1的所有数据都正确收到。

  4. 数据偏移:因首部中还有长度不确定的选项字段,故数据偏移字段是必要的

    4个位,范围最大值是15,而数据偏移的单位是4字节,则此字段是用来表TCP首部的长度的,最大长度是4*1560字节,即选项长度不超过40字节.

  5. 保留:

    6个位,保留为今后使用,目前为0

  6. 紧急URG(URGent)

    URG=1,表示紧急指针字段有效。告诉系统此报文段中有紧急数据,即高优先级的数据,应当尽快传送,而不是按原来的排队顺序传送。

    例:若发送给远程主机的一个程序,发现有问题,需要取消程序的运行,用户按下中断命令Control+C,若不使用紧急数据,那么这两个字符就会存储在TCP的缓存末尾,这样就浪费很多时间.

     

    URG=1,发送进程就告诉TCP有紧急数据需传送,TCP就会将紧急数据插入到本报文段的最前面,这需要和首部中的紧急指针字段配合使用.

     

  7. 确认ACK(ACKnowlegment)

    ACK=1,确认号字段才有效,当ACK=0,无效。但TCP规定,在连接建立后所有传送的报文段都必须把ACK1.

  8. 推送PSH(PuSH):

    当两个进程通信时,有时一端的进程希望键入一个命令后,能立即收到对方的响应,这时TCP就可以将PSH=1,并立即创建一个报文段发送出去,接收方TCP收到PSH=1,就会尽快交付给接收端进程,而不会再等整个缓存填满后再交付。

  9. 复位RST:

    RST=1,表示TCP连接出现严重错误,必须释放连接,再重新建立连接。RST1可以用来拒绝一个非法的报文段。

(10)同步SYN:

  在建立连接时用来同步序号,当SYN=1&&ACK=0,表示这是一个请求连接的报文段,若对方同意建立连接,则SYN=1&&ACK=1。故SYN=1:表示一个连接请求和连接接收报文。

(11)终止FIN

   释放一个连接,当FIN=1,表示报文段发送完毕,并要求释放连接。

(12)窗口:我告诉你我的窗口值的目的是要你知道我一次性能接收多大的数据量。

   2个字节,从0开始,窗口指的是发送本报文段的这一方的接收窗口(而不是自己的发送窗口),窗口值告诉对方:本报文段首部的确认号开始算起,接收方目前允许(窗口值是经常动态变化的)对发送方发送的数据量。

(13)检验和:

   2个字节,检验首部和数据部分,和UDP一样,计算检验和时,需要在TCP的报文段前面加上12字节的伪首部,伪首部格式也与UDP的伪首部一样,把UDP伪首部的第4个字段的17改为6,把第5个字段UDP长度改为TCP长度。接收时,也仍然要加上伪首部来计算校验和,若使用IPv6,则相应的伪首部要改变。

(14)紧急指针:

   2个字节,当URG=1,紧急指针才有意义,指出本报文段中的紧急数据的字节数。

注意:当窗口值为0,也可以发送紧急数据。

(15)选项:

   最长为40字节,当没有选项时,TCP首部长度为20字节。

 

 

TCP首部中的MSS字段的作用:MSS只是TCP协议分组数据部分的最大长度

   首先运输层的传输效率都是受IP层分片的长度影响,运输层的协议分组应当尽量接近分片的长度,但不能超过分片长度。这时候就由MSS字段值来告诉收发双方,对方能够支持什么样的长度,双方都在MSS字段写入各自支持的合适长度,然后双方都按照对方的MSS值来设定协议分组的长度。

   这样就可以尽可能的高效率的利用信道,例如:AàB,MSS=600;BàA,MSS=700.若主机没有填写MSS字段,其默认值是536字节,也就是TCP的最小报文长度都是536+20=556字节,这是因特网上所有主机都应该能接受的报文段长度。


推荐阅读
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 高效的JavaScript异步资源加载解决方案
    本文探讨了如何通过异步加载技术处理网页中大型第三方插件的加载问题,避免将大文件打包进主JS文件中导致的加载时间过长,介绍了实现异步加载的具体方法及其优化。 ... [详细]
  • 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]
  • 本文介绍了实时流协议(RTSP)的基本概念、组成部分及其与RTCP的交互过程,详细解析了客户端请求格式、服务器响应格式、常用方法分类及协议流程,并提供了SDP格式的深入解析。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 本文将详细介绍如何使用PHP获取文件夹的大小,包括子文件夹的大小,并提供实用的代码示例。 ... [详细]
  • 腾讯云移动推送TPNS(Tencent Push Notification Service)为APP开发者和运营人员提供了一站式、高效、稳定的推送解决方案,帮助提升用户活跃度和运营效率。 ... [详细]
  • MySQL Administrator: 监控与管理工具
    本文介绍了 MySQL Administrator 的主要功能,包括图形化监控 MySQL 服务器的实时状态、连接健康度、内存健康度以及如何创建自定义的健康图表。此外,还详细解释了状态变量和系统变量的管理。 ... [详细]
  • 深入解析Dubbo:使用与源码分析
    本文详细介绍了Dubbo的使用方法和源码分析,涵盖其架构设计、核心特性和调用流程。 ... [详细]
author-avatar
Cyndi_lidi_816
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有