读书笔记:图解TCP/IP

本文深入解析TCP/IP协议,对比OSI模型,阐述TCP/IP各层功能,包括网络接口层、互联网层、传输层及应用层。重点介绍IP协议的寻址、路由控制、分包与组包,TCP和UDP的特性及应用场景,以及DNS、ARP、ICMP等关键协议的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二章  TCP/IP基础知识

20世纪90年代,ISO开展OSI这一国际标准协议的标准化进程,然而OSI协议并没有的到普及,真正广泛使用的是TCP/IP协议,究其原因,是由TCP/IP的标准化所致,TCP/IP的标准化中有其他协议的标准化没有的要求,这就是让TCP/IP更迅速地实现和普及的的原动力,而OSI未能达到普及,主要原因在于未能尽早的指定可行性比较强的协议,未能提出对应技术快速革新的协议以及没有能及时进行后期改良的方案

        TCP/IP的协议标准化过程与其他的标准化过程有所不同,具有两大特点:一是具有开放性(是由IETF讨论指定的,而IETF本身就是一个允许任何人加入进行讨论的组织),二是注重实用性(其次,在TCP/IP的标准化过程中,指定某个协议的规范本身已经不再那么重要,而首要任务就是实现真正能够实现通信的技术),既被标准化的协议能否被世纪运用

       TCP的协议由IETF讨论指定,那些需要标准化的协议,被人们列入RFC文档并在互联网上公布

TCP/IP与OSI参考模型

  

  

 

     不难看出来: OSI参考模型注重  "通信协议必要的功能是什么"

                         TCP/IP更强调 "在计算机实现协议应该开发那种程序"

 硬件(物理层):TCP/IP的最底层是负责数据传输的硬件,这种硬件相当于以太网或者电话线路等物理层的设备,关于它的内容一直无法统一定义,因为只要人们在物理层面上所使用的传输媒介(如网线或者无线),网络的带宽 可靠性 安全性 延迟等都会有所不同,而在这些方面有没有一个既定的指标,但是,TCP/IP是在网络互连的设备之间能通信的前提才能被提出来的协议

网络接口层(数据链路层): 利用以太网中的数据链路层进行通信,因此属于接口层,也就是说,把它当做让NIC起作用“驱动程序也无妨”

互联网层(网络层):互联网使用IP协议,相当于OSI模型中的第三层网络层,IP协议基于IP地址转发分包数据

     TCP/IP分层中的互联网层和传输层的功能通常由操作系统提供,尤其是路由器,它必须得实现通过互联网转发分组数据包的功能,此外,连接互联网的所有主机跟路由器必须实现IP的功能,其他连接互联网的设备(如网桥、中继器、或者集线器)就没必要一定实现IP或者TCP的功能

    IP:是跨越网络传送数据包,使整个互联网都能收到数据的协议,IP协议使数据能够发送到地球的另一端,这期间它使用IP地址作为主机的标识。IP还隐含着数据链路层的功能,通过IP,互相通信的主机之间不论经过怎样底层数据链路都能实现通信,虽然IP也是分组交换的一种协议,但是它不具有重发机制,即使分组数据包未能到达对端主机也不会重发,因此,属于非可靠传输协议。

 ICMP:IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知,ICMP就是为了这一功能而制定的,它有时也被用来诊断网络的健康状况

  ARP:从分组数据包的IP地址解析出物理地址(MAC地址)的一种协议

传输层:

TCP: 一种面向有连接的传输层协议,他可以保证两端通信主机之间的通信可达,而且还能够正确处理传输过程中丢包、传输顺序乱掉等异常情况,但是为了建立和断开,有时候他需要至少七次的发包和收包,导致网络流量的浪费,为了提高网络的利用率,TCP协议定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等场合使用

UDP:有别于TCP,一种面向无连接的传输层协议,UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现,常用与分组数据较少的或者多播、广播通信以及视频通信等多媒体领域

应用层:TCP/IP分层中,将OSI参考模型的会话层、表示层和应用层的功能都集中到应用程序中实现,这些功能有时由一个单一的程序实现,有时也可能会由多个程序实现,因此,细看TCP/IP的应用程序功能会发现,它不仅实现OSI模型中应用层内容,还要实现会话层和表示层的功能

WWW:

   浏览器与服务端之间通信所用的协议是HTTP,所传输数据的主要格式是HTML,WWW中的HTTP属于OSI应用层的协议,而HTML属于表示层的协议

电子邮件:发送电子邮件的协议叫做SMTP,最初,人们只能发送文本格式的电子邮件,然而现在MIME协议扩展以后就可以发送声音、图像等各式各样的信息,甚至还可以修改邮件文字的大小、颜色。这里提到的MIME属于OSI参考模型的第六层-表示层

文件传输(FTP):该过程使用的协议叫做FTP,传输过程中可以选择二进制方式还是文本方式,在FTP进行文件传输的时候会建立两个TCP连接,分别发送传输请求时所要到的控制连接与实际传输数据时所要用到的数据连接

远程登录:常用telnet和ssh两种协议实现

网络管理:

在TCP/IP中进行网络管理中,采用SNMP协议,使用SNMP管理的主机、网桥、路由器等称作SNMP代理(Agent)而进行管理的那一段叫做管理器。SNMP正式两者所用到的协议,在SNMP的代理端,保存着网络接口的信息,通信数据量,异常数据量以及设备温度等信息,这些信息可以通过MIB访问,因此,在TCP/IP网络管理中,SNMP属于应用协议,MIB属于表示层协议

 

TCP/IP分层模型与通信示例

数据包首部:

 

TCP模块的处理:为了实现TCP这一功能,需要在应用层数据的前端附加一个TCP首部,TCP首部中包括源端口号和目标端口号(用以识别主机跟接受主机上的应用)、序号(用以发送的包中那部分是数据)以及校验和(用以判断是否被损坏),随后将附加了TCP首部的包再发送给IP

IP模块的处理:IP把TCP传过来的TCP首部和TCP数据结合起来当做自己的数据,并把TCP首部的前端加上自己的IP首部,因此IP数据包中IP首部后面紧跟着TCP首部,然后才是应用的数据首部和数据本身,IP首部包含接收端IP地址以及发送端IP地址,紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息,生成后参考路由控制表决定此包IP的路由或者主机,随后IP包将发送给连接这些路由器或主机网络接口的驱动程序,实现真正发送数据(如果不知道接收端MAC地址,利用ARP查找,只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网的驱动程序,实现数据传输)

网络接口(以太网驱动)的处理:IP传过来的IP包其实对于以太网来说就是数据,然后给这数据附上以太网首部并进行发送处理,以太网首部包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议,根据上述信息产生的以太网数据包将通过物理层传输给接收端,发送处理中的FCS(为了判断接受包是否由于噪音而被破坏)由硬件计算,添加到包的最后

经过数据链路的包

     包流动的时候,从前往后被附加了以太网首部,IP首部,TCP首部(或者UDP首部)以及自己应用的首部和数据,每个包首部至少都会包含两个信息:一个是发送端和接收端的地址,另一个是上一层的协议类型,经过每个协议分层,都必须有识别发送端和接收端的信息,以太网会用mac地址,IP会用ip地址,而TCP/UDP则会用端口号作为识别两端主机的地址

     此外,每个分层的包首部还包含一个识别位,它是用来标识上一层协议的种类信息,例如:以太网包首部中的以太网类型。就是在应用的首部信息中,有时也会包含一个用来识别其数据类型的标签

数据包接收处理:包的接收流程是发送流程的逆序过程

    网络接口(以太网驱动)的处理:  主机收到以太网包以后,首先从以太网的包首部找到mac地址判断是否为发给自己的包,如果不是则丢弃,如果是,就查找以太网包首部中的类型域从而确定以太网所穿送过来的数据类型,如果是IP包则将数据传给处理IP的子程序,如果是ARP的协议,就把数据传给ARP处理,但是如果包含一个无法识别的协议类型,则丢弃

   IP模块的处理:  IP模块收到IP包首部以及后面的数据部分以后,首先判断包首部IP地址与自己IP地址的匹配,则可以接受数据并从中查找上一层的协议,如果是TCP就将IP包首部之后的部分传给TCP处理,UDP类似。对于有路由器的情况下,接收端地址往往不是自己的地址,此时,需要借助路由器控制表,在调查应该传达的主机或路由器以后再转发数据

   TCP模块的处理: 在TCP模块中,首先会计算校验和,判断数据是否被破坏,然后检查是否在按照序号接受数据,最后检查端口号,确定具体的应用程序,数据接受完毕后,接收端则发送一个“确认回执”给发送端,如果这个信息未能到达发送端,那么发送端会认为接收端没有接受到数据则一个反复发送。  数据被完整接受以后,会传给由端口号识别的应用程序

应用程序的处理:接收端应用程序会直接接受发送端发送的数据。例如邮件,通过解析数据获取邮件的收件人地址是A的地址,如果主机B没有A的邮件地址,那么主机B返回“无此收件地址”的报错信息,如果有,邮件被保存到本机的硬盘上,如果保存也能正常进行,呢么接收端会返回一个“处理正常”的回执给发送端,反之,一旦出现磁盘满、邮件未能成功保存问题,就发送一个“处理异常”的回执给发送端

 

第三章 数据链路

1.数据链路的作用

    数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范,通信媒介包括双绞线电缆、同轴电缆、光纤、电波以及红外线等介质。此外,各个设备之间有时也会通过交换机、网桥、中继器等中转数据。

   计算机以0、1来表示信息,然而实际的通信介质之间处理的确实高压的高低、光的闪灭以及电波的强弱等信号,而物理层就是把这些信号与二进制的0.1进行转换。  数据物理层处理的数据也不是单纯的0.1序列,该层把他们集合为一个叫做“帧”的块,然后进行传输。  数据链路也可以被视为网络传输中的最小单位,其实仔细观察联通全世界的互联网就可以发现,它也不外乎是由众多这样的数据链路组成的,因此又可以称互联网为“数据链路的集合”

  在以太网与FDDI(光纤分布式数据接口)的规范中,不仅包含数据链路层也规定物理层的规格,而在ATM(异步传输方式)的规范中,还包含了网络层的一部分功能

网络括扑:

MAC地址:用于表示数据链路中相连的节点,地址长48比特,在使用网卡(NIC)的情况下,MAC地址一般被烧入到ROM中,因此都是唯一的,地址中3-24位表示厂商识别码,每个NIC厂商都有特点唯一的识别数字,25~48是厂商内部识别每个网卡而用的,可以保证全世界不会有相同MAC地址的网卡,并且IEEE802.3(局域网指定标准)指定mac地址规范的时候没有限定数据链路的类型,不论哪种数据链路的网络(以太网、FDDI、ATM、无线lan、蓝牙等)都不会有相同的MAC地址出现

  

 MAC地址正是用来标识同一个链路中不同计算机的一种识别码

第四章IP协议

     IP作为整个TCP/IP中至关重要的协议,主要负责将数据包发送给最终的目标计算机,IP能够让世界上两个任意之间的计算机通信,TCP/IP的心脏是互联网层,这一层主要由IP和ICMP两个协议组成,相当于OSI参考模型中的第三层--网络层

     网络层作用:实现终端节点之间的通信,这种终端节点之间的通信也叫点对点通

     数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递,而一旦跨越多种数据链路,就需要借助网络层,网络层可以跨越不同的数据链路,即使在不同的数据链路上也能实现两端节点之间的数据包传输

网络层和数据链路层的关系:数据链路层提供直连两个设备之间的通信功能,与之相比,IP则负责在没有直连的两个网络之间进行通信传输,

    

IP基础知识

  IP大致分为三大作用模块:IP寻址、路由(最终节点为止的转发)以及IP分包和组包

IP地址属于网络层地址

   IP地址用于在连接到网络中的所有主机中识别出进行通信的目标地址

   不论一台主机与那种数据链路连接,其IP地址的形式都保持不变,以太网、无线局域网、PPP等,都不会改变IP地址的形式,另外,在网桥或者交换集线器等物理层或者数据链路层数据包转发设备中,不需要设置IP地址,因为这些设备只负责将IP包转化为0/1比特流转发或者对数据链路帧的数据部分进行转发,而不需要应对IP协议

路由控制:是指将分组数据发送到最终目标地址的功能

路由控制表:为了将数据包发给目标主机,所有主机都维护一张路由控制表,该表记录IP数据在下一步发给哪一个路由器,IP包根据这个路由器在各个数据链路上传输

数据链路的抽象化:IP是实现多个数据链路之间通信的协议,数据链路根据种类的不同各有特点,对于这些不同数据链路的相异特性进行抽象化也是IP的重要作用之一。    数据链路的地址可以抽象化为IP地址,因此,对于IP上一层不管数据链路使用以太网还是无线LAN或者PPP,都将一视同仁

        但是数据链路有各自的最大传输单位(MTU),所以IP进行分片处理,分片的包到了对端目标地址后会被组合起来传给上一层

IP属于面向无连接:不需要建立对端目标地址之间的连接,上层如果遇到需要发送的IP数据,该数据会被压缩成IP包发送出去,因此这种方式可能会有很多冗余的通信

   但是为什么要采用这个方式呢:1.为了简化 2.为了提速 。面向连接比起面向无连接处理相对复杂,甚至管理每个连接本身就是一个特别繁琐的事情,此外,每次通信前都要事先建立连接,又会降低处理速度,因此,IP为了实现简单化与高速化采用面向无连接的方式

IP地址的定义

IP地址是由网络标识(网络地址)和主机标识(主机地址)两部分组成的

     网络标识在数据链路的每个段配置不同的值,网络标识必须保证互相连接的每个段的地址不相重复,而相同段内相连的主机必须有相同的网络地址,IP的主机标识不允许在同一个网段内重复出现

 

路由控制:发送数据包所使用的地址时网络层的地址,即IP地址,然而仅仅有IP地址还不足以实现将数据包发送给对端目的地址,在数据发送过程中还需要类似于‘指明路由器或主机’的信息,以便真正发往目的地址,保存这种信息就是路由控制表,实现IP通信的主机和路由器都必须有,该表的形成方式有两种:1.管理员手动设置(静态路由控制)2.路由器与其他路由器相互交换信息时自动刷新(动态路由控制),为了让动态路由及时刷新路由表,在网络上互连的路由器之间必须设置好路由协议,保证正常读取路由控制信息

 工作流程:控制表中记录了网络地址与下一步应该发送至路由器的地址,在发送IP包时,先确定IP包中的目标地址,在哦从表中找与该地址具有相同网络地址的记录,根据记录将IP包转发给相应的下一个路由器,如果存在多条相同网络地址的记录,选择一个最吻合的

        默认路由:一般标记0.0.0.0/0或者default,是指路由表中任何一个地址都能与之匹配的记录

        主机路由:IP地址/32,整个IP地址所有位都将参与路由,多被用于不希望通过网路地址路由的情况

       环回地址:是在同一台计算机上的程序之间进行网络通信所使用的一个默认地址,127.0.0.1/localhost,数据包不会流向网络

路由控制表的聚合:利用网络地址的比特分布有效的进行分层配置,对内有多个子网掩码,对外呈现出同一个网络地址,这样更好地构建网络,通过路由信息的聚合可以有效的减少路由表的条目,而路由表越大,管理他所需的内存和cpu越多,查找时间越长,导致转发IP数据包性能下降,所以需要尽可能削减路由表的大小

 

 

DNS:当用户输入主机名时,DNS会自动检索那个注册了主机名和IP地址的数据库,并迅速定位对应的IP地址

执行过程:主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是返回一个失败的响应,表示无法查询到所需的IP地址

 

确定了IP地址就可以发送IP数据报,然而在底层数据链路层,进行实际通信时却又不要了解每个IP地址所对应的MAC地址

ARP:以目标IP地址为线索,用来定位一下一个应该接受数据分包网络设备对应的MAC地址,如果不在同一链路,就会通过ARP查找下一跳路由器的MAC地址(只适用于IPv4,IPv6用ICMPv6代替ARP发送邻居探索信息)

 

执行过程:1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP请求包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。(根据ARP可以动态的地址解析,因此在TCP/IP的网络构造和网络通信中无需事先知道MAC地址究竟是什么,只要有IP地址即可)
4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

 IP或者MAC是否知道一个就可以?

  1. 如果主机A给主机B发送IP数据经过路由器C,即使知道主机B的MAC地址,由于路由器C隔断两个网络,还是无法事先数据传递,此时A必须先将数据包发送给路由器C的MAC地址,2.假定MAC用广播,那么别的路由器也会受到,然后传给C,这样导致数据包重复发送3.如果不使用IP地址,MAC地址连接世界上所有网络主机和节点,而且如果全世界设备都是用MAC地址相连,那么网桥就得向全世界发送包,可想而知会造成多大的网络流量,而且网桥不得不维护一个巨大的表格来维护所学习到的MAC地址

 

 

通常我们通过个人电脑设置IP地址,也可以通过DHCP自动分配获取IP地址,而然,对于嵌入式设备,会遇到没有任何输入接口或者无法动态获取IP的情况

RARP:根据MAC获取IP地址

工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,主要用于无盘工作站,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。

ICMP:确定IP包是否成功发送目标地址,通知在发送过程中IP包废弃的具体原因,改善网络设置等,有了这些功能就可以获取网络是否正常、设置是否有误以及设备有何异常等信息,便于进行网络上的问题诊断

 

ping命令就是利用ICMP回送消息实现的

DHCP:实现了计算机只要连接到网络,就可以进行TCP/IP通信

使用UDP协议工作。具体用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

NAT:用于在本地网络使用私有地址在连接互联网时转而使用全局ip的技术,除了转换IP还出现了可以转换TCP、UDP端口号的NAPT技术,由此可以实现用一个全局IP与多态主机的通信(实际是为了应对正在枯竭的IPv4而开发的技术)

IP隧道:实现IPv4和IPv6之间的通信问题,一般情况,紧跟IP首部的是TCP\UDP首部,而现在应用,当中IP首部后面还是IP首部或者IPv6首部,这种在网路层首部后面追加网络层首部的通信方法就叫做IP隧道

显示拥塞通知:当发生网络拥塞时,发送主机应该减少数据包的发送量,作为IP上层协议,TCP虽然也能控制网络拥塞,不过它是通过数据包的实际损坏情况来判断是否发生拥塞,而且这种发放并不在在数据包损坏之前减少数据包的发送量

为了解决这个问题,人们在IP层新增一个使用显式拥塞通知的机制,既ECN。

  ECN的机制概括起来就是在发送包的IP首部记录路由器是否遇到拥塞,并在返回包的TCP首部中通知是否发生过拥塞,拥塞检查在网络层进行,而拥塞通知则在传输层进行,这两层的互相协助实现了拥塞通知的功能

 

 

 

TCP与UDP:

通信处理:HTTP服务端程序是httpd(HTTP守护进程),ssh(sshd)等,在UNIX中并不需要将这些守护进程逐个启动,而是启动一个可以代表他们接受客户端请求的inetd(互联网守护进程)服务程序即可,该超级守护进程接收到客户端请求以后会创建(fork)新的进程并转换(exec)为httpd等各个守护进程

    确认一个请求究竟发给那个服务端(守护进程),可以通过所受到数据包的目标端口号轻松识别,80转给httpd,然后这些守护进程会对该连接上的通信传输进行处理

区别

TCP:面向对象、可靠的流协议(流就是指不间断的数据结构,你可以把它想象成排水管的的水流),当应用程序采用TCP发送消息时,虽然可以保证发送的顺序,但是犹如没有任何隔断的数据流发送给接收端,TCP提供可靠性传输,实行顺序控制或者重发控制机制,此外还具有流量控制(流控制),拥塞控制提高网络利用率等众多功能

UDP:不具有可靠性的数据报协议,细微的处理它会交给上层的应用去完成,虽然可以保证发送小的大小,却不能保证消息一定会到达,因此应用有时会根据自己需求进行重发处理,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般,主要用于那些对于高速传输和实时性较高要求的通信或者广播同信

 例如:在进行IP电话通话,如果TCP的时候,数据在传输途中如果丢失会被重发,这样无法流畅通话,而采用UDP,即使有部分数据丢失,也只是影响一小部分通话

端口号:MAC地址:识别同一链路中不同的计算机

            IP地址:识别TCP/IP网络互连的主机和路由器

           端口号:识别同一台计算机中进行通信的不同应用程序

TCP/IP或者UDP/IP通常采用:源IP、目的IP、协议号、源端口号、目的端口号识别一个通信

 

 

UDP特点及其目的

   不提供复杂的控制机制,利用IP提供面向无连接的通信服务,并且它是将应用程序发来的数据在收到那一刻,立刻按照原样发送到网络上的一种机制,即使出现网络拥堵,也无法进行流量控制等避免拥塞的行为,即使出现丢吧也不负责重发,甚至包的到达顺讯乱掉时候也没有纠正的功能,常用于以下几个方面:

     包总量较少的通信(DNS、SNMP TFTP等)

     视频、音频等多媒体通信(即时通信)

     限定于LAN(局域网)等特定网络中的应用通信,广播通信(广播、多播)

TCP特点

   TCP提供面向连接的、可靠的数据流传输,传输单位称为TCP报文段,充分实现了数据传输时各种控制功能,可以丢包重发,可以怼次序乱掉的分包进行顺序控制,并且TCP作为一种面向有连接的协议,只有在确认通信对端存在才会发送数据,从而控制通信流量的浪费,TCP通过检验和、重发机制、窗口控制(滑动窗口和拥塞窗口)、等实现可靠性传输    //关于滑动窗口和拥塞窗口在博客另一章详细说明

 

推荐: https://www.cnblogs.com/mengwang024/category/636171.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值