热门标签 | 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字节,这是因特网上所有主机都应该能接受的报文段长度。


推荐阅读
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 网卡工作原理及网络知识分享
    本文介绍了网卡的工作原理,包括CSMA/CD、ARP欺骗等网络知识。网卡是负责整台计算机的网络通信,没有它,计算机将成为信息孤岛。文章通过一个对话的形式,生动形象地讲述了网卡的工作原理,并介绍了集线器Hub时代的网络构成。对于想学习网络知识的读者来说,本文是一篇不错的参考资料。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Linux防火墙配置—允许转发
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
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社区 版权所有