TCP/IP详解

重点参考:https://blog.nowcoder.net/n/daf2d95898af447ea225d021f0dc0cc7

面试官,不要再问我三次握手和四次挥手

1、多宿主主机:

网络中的计算机可能插有多块网卡,每块网卡都代表该计算机的一个接口。当然这台计算机也就有多个物理地址,称这样的计算机为多宿主计算机。也即是多个网络接口

多宿主主机不转发 IP 包。但是,您可以将多宿主主机配置为运行路由协议。TCP和UDP传输关联的终点,通常不会在IP协议层路由IP数据报。P299

当配置为防火墙时,主机不在连接到主机接口的网络之间传递包。但是,主机仍可以为授权用户提供标准 TCP/IP 服务,如 ssh。

2、本地地址与互联网地址:本地地址是局域网内设置的,互联网IP是动态分配的,唯一的(P162,使用DHCP服务器配置,最常用的是动态分配,客户机从服务器配置的地址池中获取一个可撤销的IP地址,只在租用期内有效)

就目前我们的外网现状而言,只有光线才可能是固定IP,其他的无线网卡或者拨号上网都是动态IP的,你所能固定的是本机的IP地址,而你外网的IP地址定位始终是变化的,就是拨一次号换一个IP

3、子网掩码与IP地址关系:(自己主机上的网络接口上有IP地址、子网掩码、广播地址),通过做与运算获得网络地址,如果是同一网络,可以进行直接交付

子网掩码是用来判断任意两台主机的IP地址是否属于同一网络的依据,就是拿双方主机的IP地址和自己主机的子网掩码做与运算,如结果为同一网络,就可以直接通信。IP地址和子网掩码做与运算,把IP地址的主机位直接归0,就快速得到网络地址。

4、ISP

互联网服务提供商,分配IP地址的

5、中继次数(简单理解就是将收到的信息再放出去,实现信号的中继与放大,消息发送方将该值设置为0,每次中继时递增)

中继(relay)是两点间的一条传输信道,这两点通常是交换中心。中继线是承载多条逻辑链路的一条物理连接

简单来说,路由器中继就是将两台以上无线路由器组合,实现信号的中继和放大,从而让无线网络传输覆盖范围更广。

6、DHCP(动态主机配置协议)协议操作:使用DHCP获得IP地址、子网掩码、路由器IP地址、DNS服务器中的IP地址,这些是系统正常运行的基本要素

(1)客户机发送DISCOVER(广播);接收到的每台服务器,响应一个DHCPOFFER消息,提供的IP地址放在“你的IP地址”字段

(2)可能来自多台服务器的DHCPOFFER消息,客户机确定自己想要接受的DHCPOFFER,广播一个包含服务器标志符选项的DHCPOFFER消息;

(3)可能多台服务器接收到DHCPREQUEST消息,之后DHCPREQUEST消息中标志的服务器同意将该地址绑定,其它服务器清楚与该请求相关的状态。

(4)完成绑定后,选定的服务器响应一个DHCPACK消息,通知该客户机使用该地址

(5)客户机接收到DHCPACK消息后,探测网络以确保获得的地址未被使用

7、三次握手:

目的:客户端与服务器建立TCP连接

过程:

一次握手:客户端发送同步包(SNY)到服务器,并进入SNY_SEND状态,并等待服务器确认;

二次握手:服务器收到SNY,发送一个对SNY的确认,同时发送一个自己的SNY包(即ACK+SNY),此时服务器进入SNY_RECV状态

三次握手:客户端收到服务器的ACK+SNY,向服务器发送确认包ACK,发送完毕,客户端和服务器进入ESTABLISHED状态

三次握手完成,客户端和服务器开始传送数据

 

 

6.3.2

IPv6使用SLAAC(无状态地址自动配置)分配地址:

1、获得一个链路本地地址(基于链路本地前缀和一个随机数产生链路本地地址,或者使用MAC地址中的某些位产生链路本地地址)

2、使用无状态自动配置获取全球地址(没有路由的时候,只能分配链路本地地址;有路由,路由通告RA的前缀和本地产生的信息组合成一个全球地址)

3、检测链路本地地址是否已在链路中使用(使用ICMPV6邻居请求RS和邻居通告RA,确定IPV6地址是否已在链路上使用)

IP地址在哪一层?

应用层:DNS、DHCP

传输层:差错和流量管理:TCP\UDP

网络层:抽象的数据包和提供路由 IP 

链路层:网络层地址到链路层地址的映射:ARP

第七章、防火墙和网络地址转化

防火墙功能:限制转发地流量类型地路由器

常见类型:代理防火墙(proxy firewall)、包过滤防火墙(packet-filter firewall)

包过滤防火墙:互联网路由器;三网络接口(“内”接口、“外”接口、“非军事区”DMZ接口)

代理防火墙:

多宿主的服务器主机,TCP/UDP传输关联的终点,不路由IP数据报;

墙内与墙外,内接口一个全局的IP地址,内接口一个私有地址;

墙内客户端通过特殊的配置关联到代理防火墙,而不是直接连接到提供服务的服务器主机;

代理防火墙作为应用层网关(Application Layer Gateway)ALG,每个应用层服务在防火墙上要有自己的代理处理程序,这些处理程序可以修改通过的流量

第八章 ICMPv4和ICMPv6:Internet控制报文协议

校验和

1.说明:

  [1]校验和覆盖的内容:

    IP校验和:IP首部。(IP没有提供数据校验和,在路由器中的每一跳都会改变,因为TTL字段的值在数据报转发时会被路由器减少)

    ICMP校验和:ICMP首部+ICMP数据(整个ICMPv4报文);(ICMPv6,涵盖一个来自IPv6的伪头部)端到端的校验和,即从发送方一路携带到最终的接收方。

    UDP、TCP校验和:首部+数据+12个字节伪首部(源IP地址、目的IP地址、协议、TCP/UDP包长)。

2.计算校验和的步骤:

       [1]把校验和字段设置为0。

  [2]把需要校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和。(比如64位长,分成4个16位进行二进制反码求和)

  [3]把得到的结果存入校验和字段中。

  另外UDP、TCP数据报的长度可以为奇数字节,因为计算时是16位为单位,所以此时计算校验和时需要在最后增加一个填充字节0(只是计算校验和用,不发送出去)。

3.接收端校验校验和步骤:

  [1]把需要校验的内容(包括校验和字段)看成以16位为单位的数字,依次进行二进制反码求和,如果结果是0表示正确,否则表示错误。

4.二进制反码求和步骤:

  [1]二进制反码求和,就是先把这两个数取反,然后求和,如果最高位有进位,则向低位进1。

  [2]另外,先取反后相加与先相加后取反,得到的结果是一样的。因此实现代码都是先相加,最后再取反。

ICMP:

作用:负责传递需要注意的差错和控制报文;ICMP不为IP网络提供可靠性,被封装在IP数据报中

分类:

(1)差错报文:有关IP数据包传递,包括目的不可达、重定向、超时

(2)查询或信息类报文:有关信息采集和配置,包括回显请求和回显应答

处理:

以太网帧:(以太网是使用最广泛地局域网技术,在以太网链路上的数据包称作以太网帧)

以太网链路上的数据包称作以太帧。以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的数据包(例如IP协议)。以太帧由一个32位冗余校验码结尾。它用于检验数据传输是否出现损坏。

(定向子网)广播地址:网络前缀+地址中的主机部分全部置1形成;特殊地址ff::ff::ff::ff对应于本地广播(即有限广播)

地址解析协议:(ARP:将IP层地址映射到同一IPv4层的相应的MAC层地址)

(why?IP地址类似于包裹地址,IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。Mac又称为物理地址,它是一个用来确认网上设备位置的地址。其实Mac地址更类似于一个身份,一个标识符,可以是一个IP接口,但是有多个设备,每个设备一个MAC地址)

只有Mac地址或只有IP地址可以吗?

不可以,只拥有MAC地址的话,只有在同一网络区域内,才能进行数据传输,不能跨网络区域。

只拥有IP地址也不行,相当于包裹只能到这个IP接口,但是不知道是哪台设备的(mac地址,身份/标志符)

在IPv4中使用的是ARP协议,在IPv6中使用的是ND(Neighbor discover)协议中的NS和NA报文来实现的。

共享式以太网以及交换式以太网

共享式以太网:(以集线器为核心,共享统一带宽,大量用户处于检测等待的状态)

共享式以太网的典型代表是使用10Base2/10Base5的总线型网络和以集线器为核心的星型网络。在使用集线器的以太网中,集线器将很多以太网设备集中到一台中心设备上,这些设备都连接到集线器中的同一物理总线结构中。

共享式以太网中所有节点都处于同一冲突域中,不管一个帧从哪里来或到哪里去,所有的节点都能接收到这个数据帧。随着节点的增加,大量的冲突将导致网络性能急剧下降。而集线器在某一时刻只能传输一个数据帧,这就意味着集线器的所有接口都要共享同一带宽。

交换式以太网:(可以减小冲突,提高带宽,接入交换机的节点享有全部的带宽)

交换式以太网是以交换式集线器或者交换机为中心构建的星形拓扑结构网络。在交换式以太网中,交换机根据接收到的数据帧中的MAC地址决定数据帧应发往交换机的哪个端口。因为端口间的帧传输彼此屏蔽,因此节点就不必担心自己发送的数据帧在通过交换机时是否会与其他节点发送的帧发生冲突。

在交换式以太网中,交换机为每个用户提供专用的信息通道

路由器与交换机的区别:(都是连接互联网的交换设备)

1、交换机发生在网络的第二层数据链路层,而路由器发生在第三层网络层。

2、路由器可以根据IP地址寻找下一个设备,可以处理TCP/IP协议;而交换机是Mac地址寻址。

3、交换机是分配网络数据,路由器可以给网络分配IP地址

交换概念:

交换是一个技术概念,也就是完成信号从设备入口到出口的转发,当用来描述数据网络第二层的设备时,它就是一个桥接设备;如果是用来描述数据网络第三层设备,它就是一个路由设备。

为什么要有交换机?

交换机的最大好处是快速,由于交换机只需识别帧中MAC地址,根据地址转发端口算法简单,但是有如下缺点:

http://www.sohu.com/a/240080803_100169323

回路、负载集中、广播控制、子网划分、保密问题等

第九章、广播和本地组播(IGMP和MLD)

1、IPv6支持组播、但不支持广播;只有使用UDP传输协议的用户应用程序才利用广播和组播;TCP是一个面向连接的协议,使用广播和任播。

2、广播

定义:将报文发送到网络中的所有可能接收者

地址:

定向子网广播:网络前缀+地址中的主机部分全部置1形成

定向广播:特殊地址ff::ff::ff::ff对应于本地广播

3、组播

定义:网络只负责向预期的/感兴趣的接收方来发送流量。

地址:00:00:5e:00:00:00到00:00:5e:ff:ff:ff为单播地址;01:00:5e:00:00:00到01:00:5e:ff:ff:ff为组播地址;01:00:5e:00:00:00到01:00:5e:7f:ff:ff(占一半)为IPv4组播流量。其中00:00:5e为IANA拥有的以太网地址前缀。

映射:非唯一,多个IPv4组ID可以被映射到相同的MAC层组地址。

IGMP:

MLD:

第十章、用户数据报协议(UDP)和IP分片

UDP特点:

没有流量控制(UDP端口有一个有限队列,队列溢出时会丢弃进入的数据报,UDP不能告诉客户减慢速率),没有拥塞控制(发送方与接收方之间的IP路由器也有队列,拥塞会影响所有流量经过拥塞发生地点的网络用户)和差错纠正;有差错检测(通过端到端的校验和)和信息边界保留;

无连接特征,所以要比其它传输协议使用更少的开销(面向连接:使用TCP的两个应用程序必须在它们可交换数据之前,即建立TCP连接之后)

边界信息保留:(UDP返回一个UDP数据报的完整负载,而TCP是面对字节流的,需要应用程序去处理消息边界)

UDP是保留消息边界的传输层协议,利用UDP通信的应用程序每次发送操作会产生一个IP数据报(不考虑分片),这就约束每次发送的数据量不能大于MTU(最大传输单元),接收端每次接收都会返回一个UDP数据报的完整负载,不会出现返回半个数据报负载的情况。

而TCP是不保留消息边界的流协议,发送端调用发送的次数和每次发送的数据量,跟接收端调用接收的次数和每次接收的数据量,没有任何对应关系,所以使用TCP的应用程序需要去处理消息边界。

第十一章、名称解析和域名系统(参考计算机网络)

 

第十三章、TCP连接管理

13.2 TCP连接的建立与终止

(1)由一个4元组组成:两个IP地址和两个端口号(一对端点或者套接字)

(2)一个连接的三个阶段:启动、数据传输(连接已建立)、退出(关闭)

(3)一个TCP连接建立包括三个步骤:(每发送一个SYN,序列号会自动加1)

一次握手:客户端发送同步包(SNY)到服务器,指明自己想要连接的端口号和它的客户端初始序列号(ISN(c)),并进入SNY_SEND状态,并等待服务器确认;

二次握手:服务器收到SNY,发送一个对SNY的确认(将ISN(c)+1作为返回的ACK数值),同时发送一个自己的SNY包(包含了它的初始序列号(ISN(s))),此时服务器进入SNY_RECV状态

三次握手:客户端收到服务器的ACK+SNY,向服务器发送确认包ACK(ISN(s)+1),发送完毕,客户端和服务器进入ESTABLISHED状态

三次握手完成,客户端和服务器开始传送数据

 

(4)TCP连接关闭包括4个报文段(4次挥手):

一次挥手:连接的主动关闭者发送一个FIN段指明接收者希望看到的自己当前序列号(K),FIN段还包含了一个ACK段用于确认对方最近一次发来的数据

二次挥手:连接的被动关闭者将K的数值+1作为响应的ACK值,以表明它已经成功收到主动关闭者发送的FIN。

三次挥手:被动关闭者转变为主动关闭者,并发送自己的FIN,该报文段的序列号为L;

四次挥手:为了完成连接的关闭,最后发送的一个报文段还包含一个ACK用于确认上一个FIN。然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

(5)为什么要等待2MSL?

MSL:任何报文段在被丢弃前在网络中被允许存在的最长时间。

规则:当TCP执行一个主动关闭并发送最终的ACK时,连接必须处于TIME_WAIT状态并持续两倍于最大生存期时间。

作用:

a、保证TCP协议的双全工连接可以可靠关闭

b、保证这次连接的重复数据段从网络中消失

第一点说明:

如果客户端直接处于CLOSED状态,那么由于IP协议不可靠或者其它原因,客户端对FIN的回复ACK没有到达服务器,服务器以为客户端没有收到FIN,服务器会在超时之后继续发送FIN,由于客户端已经CLOSED,就找不到与FIN对应的TCP连接;所以客户端要先处于TIME_WAIT,当再次收到FIN,可以保证服务器收到ACK,最后正确地关闭连接。

第二点说明:

如果客户端直接处于CLOSED状态,然后再向服务器发起一个新的TCP连接,若是新的连接与旧的连接的端口号相同,则可能前一次连接的数据还残留在网络中,这些延迟数据在新连接建立之后才到达服务器端口,端口认为这些数据是来自于新的连接,则会产生数据混淆,所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。

第十四章、TCP超时与重传

第十五章、TCP数据流与窗口管理

流量控制:如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

Q:怎么控制?

可以采用可变滑动窗口实现流量控制

包括报文段序列号、ACK号和窗口大小(接收端的可用空间,字节为单位)

序号seq:报文段发送的数据组的第一字节的序号,每个字节一个序号,序号保证TCP传输的有序性;

确认号:指明下一个期待收到的字节序号,表明该序号之前的数据已经正确无误地收到。确认号只有当ACK标志为1才有效,为0表示报文中不包含确认信息;大写ACK为确认号标志,小写ack为确认字段的值

接收窗口大小字段rwnd(receiver window): 表明接收端可用缓存的空间大小,以字节为单位;

 

 

可以看到数据报丢失,接收端进行三次流量调节;使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。

 

持续计时器:

TCP通过接收端的通告窗口来实现流量控制的,当接收端重新获得可用空间时,会给发送端传输一个窗口更新,告知其可继续发送数据。这样的窗口更新为“纯ACK”(不包含数据,所以不能保证传输可靠性,即丢失重传),如果该“纯ACK”丢失,通信双方会一直处于等待状态;为防止死锁的发生,发送段会采用一个持续计时器间歇性地查询接收端,看其窗口是否已增长;持续计时器会触发窗口探测的传输,强制要求接收端返回ACK(包含窗口大小)。

窗口探测包含一个字节数据,采用TCP可靠传输(丢失重传)

第十六章、TCP拥塞控制

拥塞:路由器因无法处理高速率到达的流量而被迫丢失数据信息的现象称为拥塞。

拥塞窗口cwnd(congestion window):反映网络传输能力的变量;

通知窗口大小字段awnd:接收端剩余缓存大小

实际的发送窗口:W=min(cwnd,awnd)。两者之间较小的。(cwnd只是一个状态两,实际决定发送方能够发送多少数据的是发送方窗口)

包守恒:稳定状态下的TCP拥塞行为,实际是试图使在网络传输路径上的数据包守恒

TCP主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复

为了便于讨论,做以下假设:

(1)接收方有足够大的接收缓存,因此不会产生流量控制(通过可变滑动窗口)

(2)虽然TCP的窗口大小以字节为单位,但这里设窗口的大小单位为报文段

慢开始与拥塞避免:

TCP在建立新连接时执行慢启动,直至有包丢失时,执行拥塞避免算法进入稳定状态;

发送的最初执行慢开始,令cwnd=1,发送方只能发送一个报文段;当收到确认后,将cwnd加倍,因此之后发送方可以发送的报文段数量为:2、4、8.。。

设置一个慢开始门限ssthresh,当cwnd>=ssthresh,进入拥塞避免,每个轮次只将cwnd加1.

如果出现超时,令ssthresh = cwnd/2,重新执行慢开始。

快重传与快恢复:

在接收方,要求每次接收到的报文段都应该对最后一个已收到的有序报文段进行确认。例如已经收到M1和M2,此时收到M4,应当发送对M2的确认。

在发送方,如果收到三个重复确认(ACK),那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如重传三个M2,则M3丢失,立即重传M3。

这时候只是丢失个人报文段,而不是网络拥塞。因此执行快恢复,令ssthresh = cwnd / 2, cwnd = ssthresh, 此时直接进行拥塞避免;

慢开始和快恢复的快慢指的是cwnd的设定值,而不是增长速率(慢开始cwnd设为1,快恢复cwnd设为ssthresh)

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值