网络根基之TCP&UDP基础知识

TCP&UDP基础知识

目录

分层
  • 因特网的协议栈由4个层次组成:物理链路层、网络层、传输层、应用层(自底向上)
    • 应用层是网络应用程序及其应用层协议存留的地方。因特网的应用层包括许多协议,如HTTP协议、SMTP、FTP等。
    • 传输层提供了一个在应用程序的客户端和服务器之间传输应用层报文的服务。在因特网中有两个运输层协议,即TCP和UDP
    • 网络层负责将成为数据报的网络层分组从一台主机转移到另一台主机上,网络层有一个重要的IP协议。网上对网络层的一种解释是为数据包选择路由IP
    • 物理链路层的任务是从一个网络单元向邻近的网络单元移动整个帧(链路层分组称为帧)。网上对链路层的一种解释是传输有地址的帧及错误检测功能。
  • 在发送主机,应用层报文被传输给传输层,应用层报文和运输层首部信息共同构成了传输层报文段,传输层报文段因此封装了应用层报文。网络层则增加了如源地址和目的地址等网络层首部信息,形成了网络层数据报,该数据包传递给链路层,链路层增加自己的链路层首部信息并创建了链路层帧。
  • 为了使在网络体系结构中各层次大体上成为独立的组成部件,许多层需要有它们自己的地址方案:应用层的主机名、网络层的IP地址和链路层的MAC地址。
以太网MAC地址是怎么识别的
  • 发送方主机使用地址解析协议(Address Resolution Protocol, ARP)以检测本地网络的所有MAC地址。如下图所示,发送主机在整个LAN发送ARP请求消息,这是一条广播消息。ARP请求包含目标设备的IP地址,LAN上的每一个设备都会检查该ARP请求,看看是否包含它自身的IP地址。只有符合该IP地址的设备才会发送ARP响应。ARP响应包含ARP请求中IP地址相对应的MAC地址。
TCP
TCP三次握手
  • TCP漏洞:半连接
  • 客户机首先发送一个特殊的TCP报文段,服务器用另外一个特殊的TCP报文段来响应,最后客户机再用第三个特殊报文段作为响应。前两个报文段不包含“有效载荷”(也就是应用层数据),而第三个报文段可以承载有效载荷(在HTTP中,第三个报文段会携带HTTP的请求报文,即有效载荷)
TCP连接的终止
  • 在wireshark中分析TCP四次挥手时,四次发送的信息分别为【FIN, ACK】,【ACK】,【FIN, ACK】,【ACK】
  • 因为Nagle算法影响,四次挥手可能会变成三次,即第二步和第三步合为一步
  • TCP连接终端还可以通过直接发送RST报文来实现
为什么建立连是三次,而关闭却是四次呢?
  • 这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
TCP协议状态机以及状态迁移图
  • 这里的2MSL的意义在于
    • 当TCP执行一个主动关闭,并发回最后一个 ACK,该连接必须在 TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的 FIN),其目的就是为了让连接保存一定时间从而能够在丢失ACK情况下再次发送ACK
    • 第二是防止新连接(相同ip和端口)建立时,不会接受到来自原先已经关闭连接的分组,因为TCP不给处于TIME_WAIT状态的连接发起新的化身。
    • 2MSL是针对主动关闭连接一方的
TCP首部的数据格式
  • TCP首部字节最长有60字节,正常情况下是20字节, 首部各字段的含义和具体作用参见《TCP-IP详解卷一》17.3节
  • 序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则 TCP用序号对每个字节进行计数。序号是32 bit的无符号数,序号到达 2^32-1后又从0开始。当建立一个新的连接时, SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN(Initial Sequence Number)。该主机要发送数据的第一个字节序号为这个 ISN加1,因为SYN标志消耗了一个序号( FIN标志也要占用一个序号)。既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加 1。只有ACK标志(下面介绍)为 1时确认序号字段才有效。发送ACK无需任何代价,因为 32 bit的确认序号字段和 ACK标志一样,总是TCP首部的一部分。因此,我们看到一旦一个连接建立起来,这个字段总是被设置, ACK标志也总是被设置为1。
  • 确认序号: 确认序号包含发送确认的一端所期望收到的下一个序号,并不是每个包都需要接收到Ack才表示传输成功,可以连续几个包通过一个ack来确认传输成功。例,连续发送序号1,2,3,4,5共5个包,只要接受方发送Ack6(累积确认)则代表所有的包都接受成功,因为Ack6表示期望的下一个序号是6,表示1到5都发送成功了.
  • 窗口大小: 实际在三次握手时,双方会把一个叫“Window Scale”的值告知对方,对方收到该值(设为)后作为2的指数(即2^n),并乘以16位的窗口大小来作为实际的窗口,这么做的原因是网络带宽越来越大,65536字节已经不够用了. 发送窗口和MSS的关系: 发送窗口决定一次能发多少字节,而MSS决定这些字节分多少个包发送。
SWS糊涂窗口综合症
  • Nagle和延迟确认分别是发送方和接收方用来解决SWS问题的办法。糊涂窗口综合症是指在发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者都存在时,通过TCP连接传输的报文段会很小,这会导致有效载荷很小。极端情况下,有效载荷可能只有1个字节;而传输开销有40字节(20字节的IP头+20字节的TCP头) 这种现象就叫糊涂窗口综合症。

  • 发送端引起的SWS: 如果TCP发送端的应用是产生数据很慢的应用程序(比如telnet),它可能一次只产生一个字节。这种应用程序一次只往TCP提交一个字节的数据,如果没有特殊的处理,这就会导致TCP每次都产生一个只有一个有效载荷的报文段。最终导致网络的有效利用率非常低。解决办法是防止TCP发送过小的报文段,如果应用提交的数据较短,就等待足够的数据来组成一个较大的报文段再发送,为了防止长时间等待导致时延过大,可以加入一个等待时间限制,如果时间到期还没等到足够的数据就直接发送不再等待。Nagle算法就是这样的一种算法。

  • 接收端引起的SWS: 如果TCP接收端的应用处理数据的速度很慢,一次只从TCP缓存取走很小数量的数据,比如一个字节,而发送方发送的速度较快,这就会导致接收方的缓存被填满,然后接收方每次在应用取走一个字节的数据后都通告一个大小为1的窗口,这就限制发送方每次只能发送包含一个字节的有效载荷的报文段。

    对于这种糊涂窗口综合症,即应用程序消耗数据比到达的慢,有两种建议的解决方法:

    1. Clark解决方法 Clark解决方法是只要有数据到达就发送确认,但通告的窗口大小为零,这个过程持续到缓存空间已能放入具有最大长度的报文段或者缓存空间的一半已经空了。
    2. 延迟确认, 第二个解决方法是延迟一段时间后再发送确认。这时接收方不立即确认收到的报文段。接收方在确认收到的报文段之前一直等待,直到入缓存有足够的空间为止。该方法阻止了发送端滑动其窗口,当发送端发送完其数据后,它就停下来了。这样就防止了这种症状。延迟的确认还减少了通信量。接收端不需要确认每一个报文段。但它有可能使发送端重传其未被确认的报文段。可以给延迟的确认加一个时间限制来降低该方法缺点的影响。
TCP延迟确认
  • 收到数据包后并不立即确认,而是等待一段时间(绝大多数实现采用的时延为 200 ms), 这是如果有新的数据包到达便可一并确认,减少了发送确认包的次数,节省了带宽
  • 延迟确认可能会使得四次挥手变成三次挥手,因为延迟确认会省掉四次挥手中的第二个包
Nagle算法(针对发送频繁交互的数据流)
  • 在发送小包(数据字节数少)时,不立即发送,而是在等到之前数据的确认包后或到达最大可传输数据量后或发生了超时(一般为200ms)才会发送。
  • Nagle算法和延迟确认一起使用可能会产生问题,参见《Wireshark网络分析的艺术》->最经典的网络问题章节
流量控制(滑动窗口协议)
  • 在TCP中,连接双都为该连接设置了接收缓存,当报文段被连接的一端接收时,它会进入该接收缓存,被接收的数据并不一定立即被提交给应用程序。因为应用可能由于各种而没能及时读取缓存中的数据。如果发送方发送的数据太快,而应用没有及时读取被缓存的数据,缓存就会变满,此时为了防止缓存溢出,就要丢弃报文段,显然丢弃已经正确接收的报文段是对网络资源的浪费。为了解决该问题,TCP需要提供一种机制来防止接收缓存溢出。TCP提供了流量控制功能,来防止发送方发送过快而导致接收方缓存溢出的情形出现。这是通过让接收方通告一个接收窗口大小来实现的。接收窗口的大小包含在TCP头部的窗口大小字段中。其工作原理为接收方通过窗口大小通告本地可以接收的报文段的总大小
  • 该协议允许发送方在停止并等待确认前可以连续发送多个分组。使得发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。
拥塞控制(慢启动和拥塞避免算法)
  • 慢启动和拥塞避免算法,就是决定一次可以发送几个分组的(即MSS的几倍)
  • 流量控制:拥塞控制(慢启动和拥塞避免算法)(针对发送大块数据流,如读写大文件)
    在这里插入图片描述
TCP重传
  • (详见《wireshark网络分析就是这么简单》P70-重传的讲究)
  • 超时重传:一般发生在拥塞之后,发送方收不到确认包,一段时间之后会触发超时重传,超时重传对传输性能影响较大
  • 快速重传:当发送方收到3个或以上的重复确认时,就认为数据包已经丢失,从而立即重传它。与超时重传相比,它不需要等待一段时间后再发送。由于我们不知道一个重复的 ACK是由一个丢失的报文段引起的,还是由于仅仅出现了几个报文段的重新排序,因此我们等待少量重复的 ACK到来。假如这只是一些报文段的重新排序,则在重新排序的报文段被处理并产生一个新的 ACK之前,只可能产生 1 ~ 2个重复的 ACK。
TCP特性
  • TCP是面向连接的服务,传送之前有握手协议,TCP协议能保证数据的可靠传输(无差错的,适当顺序的),但是不能保证数据传输的速率和经受的传输时延。TCP协议还具有拥塞控制机制。在握手阶段后,TCP连接就在两个进程的套接字之间建立了。这个连接是全双工的(双向的),即连接双方的进程都可以在此连接上同时进行报文收发。
  • 将数据打包成段: 数据会被分解成段,每一个段都包含一个校验和,从而能够检测出端到端的传输错误,每一段使用单个IP数据报来传输。
  • 确认、重传以及超时: 当一个TCP段无措地到达目的地是,接受TCP会向发送者发送一个确认,通知它数据发送成功了。如果一个段到达时是存在错误的,哪个这个段就被丢弃,确认信息也不会被发送。为处理段永远不达到或被丢弃的情况,发送者在发送每一个段时会开启一个定时器,如果定时器超时之前没有收到确认,那么就会重传这个段。
  • 排序: 在TCP连接上的每一个字节都会分配到一个逻辑序号
  • 分片相关: TCP的分段机制可以把数据拆小后封装在多个包里,避免了被网络层分片,重传TCP包的效率(只需重传丢失的那一个包)比重传IP分片(需要重新传输所有的数据)更高,而UDP的数据会被IP分片传输,如果其中任意分片丢失,则需要重传所有分片。更多内容可参考《Wireshark网络分析的艺术》中的几个关于分片的问题
UDP
  • UDP是按照接收到的数据次序,一次只读取一个数据报
  • 其它的查看下一节的TCP和UDP的区别就懂了
TCP和UDP的区别
  1. TCP首部开销20字节;UDP的首部开销小,只有8个字节
  2. TCP的发送成本更高,以DNS查询为例,使用UDP只需要两个包,而使用TCP需要9个数据包(3个包连接,2个包查询,4个包断开连接),所以通常繁忙的DNS服务器采用UDP协议。
  3. TCP面向连接,UDP是无连接的,即发送数据之前不需要建立连接。
  4. TCP提供可靠的服务,TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制、拥塞控制等机制实现可靠性传输。而UDP尽最大努力交付,即不保证可靠交付。
  5. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流, UDP是面向报文的。TCP接收数据时不是一次只读取一个数据报,而是根据buf的大小和缓冲区数据的大小中的较小值来读取数据的,可以一次性读取多个数据报;而UDP是按照接收到的数据次序,一次只读取一个数据报。流模式只要不超过流的容量就可以继续往流上提交数据,另一端只要流上有数据就可以读取,而不管这个数据的开头和结尾;数据报模式,有严格的次序关系和数据报的分割关系。而这两种的不同大概是由于TCP一个套接字只接收来自一个对象的数据,而UDP套接字可以接收来自任意对象的数据。也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。比如,主机A发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一起,这样的数据是没有意义的。
  6. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
网络中的进程通信
  • 网络中的进程通信即不同端系统(可能具有不同操作系统)上的进程通信。
  • 对于发起通信的进程标示为客户机,在会话中等待联系的进程是服务器。
  • 套接字(socket)就是进程的门户。也将套接字称作应用程序和网络之间的应用程序编程接口。套接字对运输层几乎没有控制,应用程序开发者对运输层的控制仅限于(1)选择运输协议。(2)也许能设定几个运输层参数。
  • 进程寻址:进程必须进行寻址,这包括主机地址和目的主机上接受进程的标识,主机地址通过IP,识别主机上的接受进程通过端口号(总共 2 16 2^{16} 216个),例如:web服务进程(HTTP)用的是80端口。
  • 套接字选择何种运输协议:分TCP和UDP
    • 一个TCP套接字是通过一个四元组(源地址,源端口号,目的IP地址,目的端口号)来标识的。两个具有不同的源IP地址或源端口号的到达的TCP报文段将被定向到两个不同的套接字。
    • 一个UDP套接字是由一个包含目的IP地址和目的端口号组成的二元组来全面标识的,因此如果两个UDP报文段有不同的源地址和/或源端口号,但具有相同的目的IP地址和目的端口号,那么这两个报文将通过相同的目的套接字定向到相同的目的进程。

IP

  • IP数据报格式如下图,含义和详细作用见《TCP-IP详解卷一》3.2节

    • IP首部中个字节的

    在这里插入图片描述

    • TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。 TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去 1。当该字段的值为 0时,数据报就被丢弃,并发送 ICMP报文通知源主机。TTL字段的目的是防止数据报在选路时无休止地在网络中流动
    • 标识字段(Identification) 唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加 1
  • IP的服务模型是尽力而为交付服务,是一种不可靠服务。

    • IP数据协议报使用大端格式(大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中)
IP分片
  • 分片可以发生在原始发送端主机上,也可以发生在中间路由器上
  • 下面这些字段用于分片过程。对于发送端发送的每份 I P数据报来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每个片中(我们现在已经看到这个字段的用途)。标志字段用其中一个比特来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置 1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值
  • 当IP数据报被分片后,每一片都成为一个分组,具有自己的 IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在 IP首部中有足够的信息让接收端能正确组装这些数据报片
IP地址、子网掩码、网络号、主机号、网络地址、主机地址
  • 除了I P地址以外,主机还需要知道有多少比特用于子网号及多少比特用于主机号。这是在引导过程中通过子网掩码来确定的,一种划分方法如图所示:

    在这里插入图片描述

IPv4与IPv6数据包格式区别

PING

  • PING ip的工作流程:ping程序走的是IPCM协议,发送一份 ICMP回显请求报文给主机,并等待返回 ICMP回显应答。我们以下面一个网络为例:有 A、B、C、D 四台机子,一台路由 RA,子网掩码均为 255.255.255.0,默认路由(网关)为 192.168.0.1 。
    • 当两者在在同一网段内,在主机 A 上运行“Ping 192.168.0.5”后,都发生了些什么呢? 首先,Ping 命令会构建一个 固定格式的 ICMP 请求数据包, 然后由 ICMP 协议将这个数据包连同低址“192.168.0.5”一起 交给IP 层协议(和 ICMP 一样,实际上是一组后台运行的进程),IP 层协议将以地址 “192.168.0.5”作为目的地址,本机 IP 地址作为源地址,加上一些其他的控制信息,构建一 个 IP 数据包,并想办法得到 192.168.0.5 的MAC 地址(物理地址,这是数据链路层协议构 建数据链路层的传输单元——帧所必需的),以便交给数据链路层构建一个数据帧。关键就 在这里,IP 层协议通过机器 B 的 IP 地址和自己的子网掩码,发现它跟自己属同一网络,就 直接在本网络内查找这台机器的 MAC,如果以前两机有过通信,在 A 机的 ARP 缓存表应该 有 B 机 IP 与其 MAC 的映射关系,如果没有,就发一个 ARP 请求广播,得到 B 机的 MAC, 一并交给数据链路层。后者构建一个数据帧,目的地址是 IP 层传过来的物理地址,源地址 则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送 出去。 主机 B 收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合, 则接收;否则丢弃。接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层 协议。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议,后者处理后,马上构建 一个 ICMP 应答包,发送给主机 A,其过程和主机 A 发送 ICMP 请求包到主机 B 一模一样。
    • 当两者不在同一网段内(如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机) 在主机 A 上运行“Ping 192.168.1.4”后,开始跟上面一样,到了怎样得到 MAC 地址时,IP 协议通过计算发现 D 机与自己不在同一网段内,就直接将交由路由(网关)处理,也就是将路由的 MAC 取过来,至于怎样得到路由的 MAC,跟上面一样,先在 ARP 缓存表找,找不到就广 播吧。路由得到这个数据帧后,再跟主机 D 进行联系,如果找不到,就向主机 A 返回一个 超时的信息。
  • PING域名(如www.baidu.com)的步骤,ping某个域名相对于ping IP地址来说,多了一些步骤,主要用来获取域名对应的IP地址,整个过程如下
    1. 主机查找本地系统Hosts文件的DNS缓存,如果存在该域名对应的IP,则获取IP,跳转到第8步;如果不存在,则继续。
    2. 主机向本网络路由器发起请求,查找路由DNS缓存,如果存在该域名对于的IP,则获取IP,跳转到第8步;如果不存在,则继续。
    3. 路由器向本地ISP(互联网提供商)的DNS服务器发起请求,查找DNS服务器的缓存,如果存在该域名对应的IP,则跳转到第7步;如果不存在,则继续。
    4. 本地DNS服务器向根域名服务器发起请求,根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
    5. 本地域名服务器向顶级域名服务器dns.com进行查询,顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。
    6. 本地域名服务器向权限域名服务器dns.abc.com进行查询,权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
    7. 本地域名服务器最后把查询结果——该域名对应的IP地址告诉给主机。
    8. 至此,主机知道了该域名的IP地址。
  • PING返回错误表达的含义
    • Ping 的返回信息有"Request Timed Out"、“Destination Net Unreachable"和"Bad IP address"还有"Source quench received”。
    • "Request Timed Out"这个信息表示对方主机可以到达到 TIME OUT,这种情况通常是为 对方拒绝接收你发给它的数据包造成数据包丢失。 大多数的原因可能是对方装有防火墙或已 下线。
    • “Destination Net Unreachable"这个信息表示对方主机不存在或者没有跟对方建立连接。 这里要说明一下"destination host unreachable"和"time out"的区别,如果所经过的路由器的 路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时候会出现"time out”, 如果路由表中连到达目标的路由都没有,那就会出现"destination host unreachable"。
    • “Bad IP address” 这个信息表示你可能没有连接到 DNS 服务器所以无法解析这个 IP 地 址,也可能是 IP 地址不存在。
    • "Source quench received"信息比较特殊,它出现的机率很少。它表示对方或中途的服务 器繁忙无法回应。
  • ping的其它作用
    • 可以用来测试MTU的大小
      • windows下是 ping <server_ip> -1 packSize -f ,如果成功,说明MTU>=packSize+28, 这里28是ip头20字节+IPCM头8字节;
      • linux下是ping -c 3 -s packSize -M do <server_ip>, 这里-c 3表示只发3个包,-M do 表示不分片。
    • linux下,-S选项 可以定义发送缓冲区的大小
使用 Ping检查连通性的步骤
  1. 使用 ipconfig /all 观察本地网络设置是否正确;
  2. Ping 127.0.0.1,127.0.0.1 回送地址 Ping 回送地址是为了检查本地的 TCP/IP 协议有 没有设置好;
  3. Ping 本机 IP 地址,这样是为了检查本机的 IP 地址是否设置有误;
  4. Ping 本网网关或本网 IP 地址,这样的是为了检查硬件设备是否有问题,也可以检查本 机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略)
  5. Ping 本地 DNS 地址,这样做是为了检查 DNS 是否能够将 IP映射。这一步很多博客里都没有,估计ping dns的目的就是在用域名访问是,看下是不是设置了错误的dns地址,因为如果出错了是无法将域名转成ip名的,自然也就无法访问
  6. Ping 远程 IP 地址,这主要是检查本网或本机与外部的连接是否正常

好问题

报文发送过程怎样的
  • PC 1发送报文给PC 2时,首先必须确定目的IPv4地址是否位于同一网络。PC 1通过将自己的IPv4地址与子网掩码做与操作,来判断PC 1所属的网段。接下来,PC 1对目的IPv4地址与PC 1的子网掩码做同样的与操作。如果目的网络地址与PC 1网络相同,则PC 1不使用默认网关,而是在ARP缓存中查找目的IPv4地址的设备MAC地址。如果MAC地址不在缓存中,则PC 1产生一个ARP请求来获取地址并将报文发给目的地址。如果目的网络地址位于另一网络,则PC 1将报文转发至默认网关。要确定默认网关的MAC地址,PC 1在它的ARP表中查找默认网关的IPv4地址以及相应的MAC地址。如果ARP表中没有默认网关的对应表项,则PC 1发送ARP请求。路由器R1回复ARP响应。之后PC 1将报文转发至默认网关的MAC地址
  • 然后可能经过多个路由器,具体如下:由于目的IPv4地址与R1直连的任何网络都不相符,R1在路由表中查找包含该目的IPv4地址主机的网络地址。本例中,路由表中有192.168.4.0/24网络的路由。目的IPv4地址为192.168.4.10,即该网络上的主机IPv4地址。R1找到192.168.4.0/24路由的下一条IPv4地址为192.168.2.2以及输出端口FastEthernet 0/1,这意味着IPv4报文封装到一个新的以太网帧中,目标MAC地址是下一跳路由器的MAC地址。 R3在路由表中查找该目的IPv4地址。R3路由表中有直接连接到该网络的路由。这表示报文可直接发送到目的设备而无需发送至路由器。由于下一个接口是在以太网上,所以R1必须用ARP解析出下一跳IPv4地址的MAC地址。
  • 有对应的命令可以查看经过的路由,通过mtr或traceroute 可以跟踪数据包在两台主机之间经过的路由
交换机和路由器的区别
  • 交换机→工作在数据链路层,隔离了冲突域,能够学习数据帧当中携带的源MAC地址来构建MAC地址表,同时负责查找目的MAC地址智能的转发数据。路由器→工作在网络层,隔离了广播域,通过静态路由或者动态路由协议构建路由表,能够依据数据包当中的目的IP地址智能的转发数据。
  • 路由器相当于邮局,把信投递到收件人地址,它的任务就完成了。但是信邮到了你们宿舍楼,而这个地址不是你一个人专享的,所以楼管王大爷还要负责把信给到你手里,他不会关心收件人地址,只看收件人姓名,然后打个内线电话叫你来取信。楼管王大爷就相当于交换机。如果没有邮局,你没法向世界各地的漂亮妹子们发信,也没法从楼外的漂亮妹子那里收信。但是因为楼管王大爷的存在,你仍然可以通过他与同宿舍楼的好基友书信往来。所有邮局构成的系统,就是“广域网”,而你的宿舍楼,就是“局域网”。广域网需要路由器,而局域网需要交换机。
  • 现在一般都三层。本来在公司可以只通过交换机,但还是会将不同的内部网络通过路由器来连接,这样可以分隔开且易于管理。这也是为什么内部会有不同网关配置(如10.10.112.254)的原因
TCP如何保证可靠传输
  • 校验和
  • 确认应答+序列号
  • 正确排序,重复丢弃
  • 超时重传
  • 流量控制(通过滑动窗口来实现)
  • 拥塞控制

名词解释

  • DNS: DNS的作用是将主机名(网址)转换成IP地址
  • 网关(GATEWAY):一个连接两种不同协议族的进程(例如,TCP/IP和IBM的SNA),它为某个特定的应用程序服务(常常是电子邮件或文件传输),网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。
  • 路由器:把分组从一个网络转发到另一个网络时,是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号
  • NAT(网络地址转换): 私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求(其中一种方法为端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换),如家里的路由器。
  • ICMP: 是IP协议的附属协议。 IP层用它来与其他主机或路由器交换错误报文和其他重要信息。尽管ICMP主要被IP使用,但应用程序也有可能访问它。
  • 三类IP地址:单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机)
  • 环回接口: 大多数的产品都支持环回接口(Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过 TCP/IP进行通信。 A类网络号 127就是为环回接口预留的。根据惯例,大多数系统把 I P地址127 . 0 . 0 . 1分配给这个接口,并命名为 localhost。一个传给环回接口的 I P数据报不能在任何网络上出现。我们想象,一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当IP数据报离开网络层时把它返回给自己。
  • MTU: 如果 IP层有一个数据报要传,而且数据的长度比链路层的 MTU还大,那么 IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于 MTU,MSS+20(TCP头)+20(IP头)就是MTU
  • ARP : 为IP地址到对应的硬件地址之间提供动态映射 , 将IP地址变换成以太网地址(当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48 bit的以太网地址来确定目的接口的。设备驱动程序从不检查 IP数据报中的目的IP地址)
  • RARP: 反向地址转换协议(RARP)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址
  • 广播和多播:广播和多播仅应用于 UDP,它们对需将报文同时传往多个接收者的应用来说十分重要,广播是将数据报发送到网络中的所有主机(通常是本地相连的网络),而多播是将数据报发送到网络的一个主机组。D类IP地址被称为多播组地址,用于多播。

其它

  • 光猫就是把光纤转为网络信号, 虽然支持路由, 但性能较差 . 路由器只要是路由功能. 正确使用方法是 光猫开启桥接, 不开路由功能. 接路由器来路由

参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值