图解TCP'IP

Posted lryepoch

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解TCP'IP相关的知识,希望对你有一定的参考价值。

--TCP和UDP区别:
1)TCP (Transmission Control Protocol)传输控制协议和UDP(User Datagram Protocol)用户数据报协议协议属于传输层协议。
2)其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;一般来说,TCP对应的是可靠性要求高的应用。
3)而UDP则不为IP提供可靠性、流控或差错恢复功能。UDP对应的则是可靠性要求低、传输经济的应用。

TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。

UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(Trival File Tran敏感词er Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

--TCP和UDP的区别?应用场景?

    TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
                         TCP                UDP 
    是否连接     面向连接        面向非连接 
    传输可靠性     可靠            不可靠 
    应用场合    传输大量数据  少量数据 
    速度               慢                  快

--面向连接和非面向连接的服务的特点是什么?
面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。 非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。

--TCP/IP协议:
(1)Seq:序号,标识发送的字节流。
(2)Ack:确认序号,ACK=1时,Ack才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等
(4)URG:紧急指针有效。
(5)ACK:确认序号有效。
(6)PSH:接收方尽快将这个报文交给应用层.
(7)RST:重置连接。
(8)SYN:发起一个新连接。
(9)FIN:释放一个连接。

需要注意的是:
            (A)不要将确认序号Ack与标志位中的ACK搞混了。
            (B)确认方Ack=发起方Seq+1,两端配对。 

--三次握手和四次挥手:【TCP的连接和销毁必经过程】【因为建立过程不携带数据字段,所以需要一个序号】

三次握手:建立TCP连接时,客户端和服务端总共发送3个数据包来确认连接的建立。
                 采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。

第一次:客户端发起请求,第一个控制位SYN=1,序号seq=x(x随机但不等于0),客户端进入SYN-SEND【准备发送】状态,等待服务器确认;
第二次:服务端收到请求,于是对请求进行确认,第二个控制位SYN=1,信号ACK=1,序号seq=y,确认号ack=x+1,服务端进入SYN-RCVD【准备接收】状态;
第三次:客户端收到确认SYN+ACK,发送第三个ACK=1,序号seq=x+1,确认号ack=y+1,将该数据包发送给服务端,客户端和服务端都进入ESTABLISHED【已建立连接】状态。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

为什么不能两次握手?
主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。

建立连接后,进行全双工的字节流传输;为保证tcp正常,所以设置了计时器,防止tcp长期空闲。

四次挥手:终止TCP连接时,客户端和服务端共发送4个数据包来确认连接的关闭。
第一次:客户端发送第一个控制位FIN=1,序号seq=u,关闭客户端到服务端的数据传输,客户端进入FIN-WAIT-1状态【释放等待-1】,此时主动关闭方还可以接受数据。;
第二次:服务端收到FIN,向客户端发送ACK=1,序号seq=v,确认号ack=u+1,服务端进入CLOSE-WAIT状态;客户端收到ACK报文确认后,进入FIN-WAIT-2状态;
第三次:服务端发送一个控制位FIN=1,信号ACK=1,序号seq=w,确认号ack=u+1。关闭服务端到客户端的数据传输,服务端经过LAST-ACK状态后转回到LISTEN【收听】状态;
第四次:客户端收到FIN报文,进入TIME-WAIT状态,接着发送一个报文记为“信号ACK=1,序号seq=u+1,确认号ack=w+1”,服务端进入CLOSED状态。

TimeWait作用:
    1。防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)
    2。可靠的关闭TCP连接
        在主动关闭方发送的最后一个ack(fin) ,有可能丢失,这时被动方会重新发fin, 如果这时主动方处于CLOSED 状态 ,就会响应rst 而不是ack。所以主动方要处于TIME_WAIT 状态,而不能是CLOSED 。
        TIME_WAIT 并不会占用很大资源的,除非受到攻击。还有,如果一方send 或recv 超时,就会直接进入CLOSED 状态


另一个版本:
        三次握手
        第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

        第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

        第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。


        四次挥手
        与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。

        第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。此时主动关闭方进入FIN-WAIT-1状态;

        第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。被动关闭方进入CLOSE-WAIT状态,主动关闭方收到ACK后,进入FIN-WAIT-2状态;

        第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。被动关闭方进入LAST-ACK状态;

        第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。主动关闭方进入TIME-WAIT状态,被动关闭方进入CLOSE状态;

                            在这里,为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
                            虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可能最后一个ACK丢失,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME-WAIT状态的作用就是用来重发可能丢失的ACK报文。

--滑动窗口机制
由发送方和接收方在三次握手阶段,互相将自己的最大可接收的数据量告诉对方。也就是自己的数据接收缓冲池的大小。这样对方可以根据已发送的数据量来计算是否可以接着发送。
在处理过程中,当接收缓冲池的大小发生变化时,要给对方发送更新窗口大小的通知。

--滑动窗口协议有
1、停止等待协议,发送窗口=1,接受窗口=1;
2、退后N帧协议,发送>1,接收=1;
3、选择重传协议,发送>1,接收>1;

--TCP协议的学习(六)滑动窗口 停止等待 退后N帧 选择重传:https://blog.csdn.net/qq_34501940/article/details/51180268

--拥塞避免机制
拥塞:对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。
拥塞控制:防止过多的数据注入到网络中,使得网络中的路由器或链路不致过载。
拥塞控制方法:
慢开始 + 拥塞避免;
快重传 + 快恢复。

--分层结构:

OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。

每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)【比特】
数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)【帧、点到点】
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)【分组、数据包】
传输层:TCP、UDP、SPX                                             【报文、端到端】
会话层:NFS、SQL、NETBios、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一层的作用如下:
物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

--MAC地址:media access control(媒体访问控制),称为物理地址、硬件地址,用来定义网络设备的位置,而每个网络设备会有一个专属它的IP地址。由于数据链路层负责MAC地址,所以一个主机会有一个MAC地址,MAC地址是网卡决定的,是固定的。

--TCP/IP和HTTP区别:
TCP位于传输层,HTTP位于应用层。下层只会向上层提供服务,但不会从上层获得服务。虽然HTTP本身是一个协议,但其最终还是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议。
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。

--IP地址的分类:【组成:网络地址+主机地址】

    A类地址:以0开头,      第一个字节范围:0~127(1.0.0.0 - 126.255.255.255);【1+3】
    B类地址:以10开头,    第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);【2+2】
    C类地址:以110开头,  第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);【3+1】
    D类地址:以1110开头,第一个字节范围:224~239(224.0.0.0 - 239.255.255.255);(作为多播使用)
    E类地址:保留

    私有地址:互联网上不使用,用于局域网中。

    其中A、B、C是基本类,D、E类作为多播和保留使用。
    以下是留用的内部私有地址:
    A类 10.0.0.0--10.255.255.255
    B类 172.16.0.0--172.31.255.255
    C类 192.168.0.0--192.168.255.255

    IP地址与子网掩码相与得到网络号:
    ip       : 192.168.2.110
    &
    Submask : 255.255.255.0
    ----------------------------
    网络号   :192.168.2  .0
    注:
    主机号,全为0的是网络号(例如:192.168.2.0),主机号全为1的为广播地址(192.168.2.255)

    10.0.0.0—10.255.255.255, 172.16.0.0—172.31.255.255, 192.168.0.0—192.168.255.255。(Internet上保留地址用于内部)

--IP地址与子网掩码相与得到主机号。子网掩码是为了区分各个不同的子网而设置的,与主机IP地址进行位与操作,从而区分出是否在同一网段,从而确定局域网的范围,减少广播风暴的影响范围。

1.举个例子:比如172.16.2.160/255.255.255.0:
        在没有划分子网的情况下:
        这个IP地址的【网络号】就是172.16.2.0
        主机号为 0.0.0.160

2.划分子网情况如:
        172. 16. 2. 160/255.255.255.192(IP地址/掩码)
        1010 1100 0001 0000 0000 0010 1010 0000 (二进制)
        1111 1111 1111 1111 1111 1111 1100 0000 (子网掩码)
        ------------------------------------------相"与"(理解成相乘)
        1010 1100 0001 0000 0000 0010 1000 0000(172.16.2.128这就是子网络号)
        1010 1100 0001 0000 0000 0010 1000 0001(172.16.2.129是第一个主机)
        1010 1100 0001 0000 0000 0010 1011 1110(172.16.2.190最后一个主机)
        1010 1100 0001 0000 0000 0010 1011 1111 广播地址 172.16.2.191
        1010 1100 0001 0000 0000 0010 1100 0000 172.16.2.192 下一个子网
        因为掩码是255.255.255.192 ,因此它们之间的网段间隔是256-192=64
        所以这个网段只有(2的平方-2)2个子网;
        172.16.2.128
        172.16.2.192

--特殊的IP地址:

(1)网络地址

???IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络。

(2)广播地址

???? 广播地址通常称为直接广播地址,是为了区分受限广播地址。

???? 广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。

(3)组播地址

????D类地址就是组播地址。

???? 先回忆下A,B,C,D类地址吧

????A类地址以00开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255;

????B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255;

????C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255。

????D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通信);

????E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用。

????Notice:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。

?(4)255.255.255.255

???? 该IP地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广播地址之只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可在本地广播,也可跨网段广播。例如:主机192.168.1.1/30上的直接广播数据包后,另外一个网段192.168.1.5/30也能收到该数据报;若发送受限广播数据报,则不能收到。

????Notice:一般的广播地址(直接广播地址)能够通过某些路由器(当然不是所有的路由器),而受限的广播地址不能通过路由器。

??(5)0.0.0.0

? ? ? ?常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。

? (6)回环地址

???127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1。

? (7)A、B、C类私有地址

?? 私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。

?? A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255

?? B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255

?? C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255

--IP数据包的格式:由首部 和数据 两部分组成。首部由固定部分和可选部分组成。首部的固定部分有20字节。可选部分的长度变化范围为1——40字节。

--TCP报文段:
TCP报文段的格式:分为首部和数据两部分。首部由固定部分和选项部分组成,固定部分是20字节。TCP首部的最大长度为60。
下面是报文段首部各个字段的含义。

源端口号以及目的端口号,各占2个字节,端口是传输层和应用层的服务接口,用于寻找发送端和接收端的进程,一般来讲,通过端口号和IP地址,可以唯一确定一个TCP连接,在网络编程中,通常被称为一个socket接口。
序号,占4字节,用来标识从TCP发送端向TCP接收端发送的数据字节流。
确认序号,占4字节,包含发送确认的一端所期望收到的下一个序号,因此,确认序号应该是上次已经成功收到数据字节序号加1。
数据偏移,占4位,用于指出TCP首部长度,若不存在选项,则这个值为20字节,数据偏移的最大值为60字节。
保留字段占6位,暂时可忽略,值全为0。

标志位
URG(紧急) : 为1时表明紧急指针字段有效
ACK(确认):为1时表明确认号字段有效
PSH(推送):为1时接收方应尽快将这个报文段交给应用层
RST(复位):为1时表明TCP连接出现故障必须重建连接
SYN(同步):在连接建立时用来同步序号
FIN (终止): 为1时表明发送端数据发送完毕要求释放连接

接收窗口占2个字节,用于流量控制和拥塞控制,表示当前接收缓冲区的大小。在计算机网络中,通常是用接收方的接收能力的大小来控制发送方的数据发送量。TCP连接的一端根据缓冲区大小确定自己的接收窗口值,告诉对方,使对方可以确定发送数据的字节数。
校验和占2个字节,范围包括首部和数据两部分。
选项是可选的,默认情况是不选。

TCP的可靠性如何保证?   TCP的可靠性是通过顺序编号和确认(ACK)来实现的。

--UDP(User Datagram Protocol):
UDP协议十分简单,它由两部分组成:首部和数据。其中,首部仅有8个字节,由4个字段组成,每个字段都是两个字节,包括源端口和目的端口,长度(UDP用于数据报的长度)、校验和。

--ARP是地址解析协议,简单语言解释一下工作原理。

答:
1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。

--描述RARP协议

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

--各种协议的介绍

答:ICMP协议: 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
TFTP协议: 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,
DHCP协议:动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段,使用UDP协议工作。具体用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

--DNS域名系统,简单描述其工作原理。

当一个应用进程需要把某个域名解析为IP地址时,该应用进程就会调用解析程序,并成为一个DNS用户,把待解析的域名放在DNS请求报文中,以UDP数据报的形式发送给本地域名服务器,
本地域名服务器查找到相应域名的IP地址后,就将该域名的IP地址信息放入应答报文中返回给客户进程,如果本地域名服务器没有直接查找到对应的IP地址,则向根域名服务器发出迭代查询,
再将查询到的IP地址信息回传给客户程序。

--在浏览器中输入网址之后执行会发生什么?

1.查找域名对应的IP地址。这一步会依次查找浏览器缓存,系统缓存,路由器缓存,ISPNDS缓存,根域名服务器;
2.浏览器向IP对应的web服务器发送一个HTTP请求,进行网络通信,其中分层由高到低分别为:应用层、传输层、网络层、网络接口层。发送端从应用层往下走,接收端从网络接口层往上走;
3.服务器响应请求,回送网页内容;
4.浏览器解析网页内容;

--在浏览器中输入www.baidu.com后执行的全部过程

1、客户端浏览器,通过DNS解析到www.baidu.com 的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.181.27.48,然后通过TCP进行封装数据包,输入到网络层。
2、客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
3、客户端的网络层,不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

--了解交换机、路由器、网关的概念,并知道各自的用途

答:1)交换机
在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背 部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部 交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表 中。
交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张 ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不 能划分网络层广播,即广播域。
交换机被广泛应用于二层网络交换,俗称“二层交换机”。
交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机分别工作在OSI七层模型中的第二层、第三层、第四层盒第七层,并因此而得名。
2)路由器
路由器(Router)是一种计算机网络设备,提供了路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过 的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转 送。路由工作在OSI模型的第三层——即网络层,例如网际协议。
路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。
3)网关
网关(Gateway),网关顾名思义就是连接两个网络的设备,区别于路由器(由于历史的原因,许多有关TCP/IP 的文献曾经把网络层使用的路由器(Router)称为网关,在今天很多局域网采用都是路由来接入网络,因此现在通常指的网关就是路由器的IP),经常在家 庭中或者小型企业网络中使用,用于连接局域网和Internet。 网关也经常指把一种协议转成另一种协议的设备,比如语音网关。
在传统TCP/IP术语中,网络设备只分成两种,一种为网关(gateway),另一种为主机(host)。网关能在网络间转递数据包,但主机不能 转送数据包。在主机(又称终端系统,end system)中,数据包需经过TCP/IP四层协议处理,但是在网关(又称中介系 统,intermediate system)只需要到达网际层(Internet layer),决定路径之后就可以转送。在当时,网关 (gateway)与路由器(router)还没有区别。
在现代网络术语中,网关(gateway)与路由器(router)的定义不同。网关(gateway)能在不同协议间移动数据,而路由器(router)是在不同网络间移动数据,相当于传统所说的IP网关(IP gateway)。
网关是连接两个网络的设备,对于语音网关来说,他可以连接PSTN网络和以太网,这就相当于VOIP,把不同电话中的模拟信号通过网关而转换成数字信号,而且加入协议再去传输。在到了接收端的时候再通过网关还原成模拟的电话信号,最后才能在电话机上听到。
对于以太网中的网关只能转发三层以上数据包,这一点和路由是一样的。而不同的是网关中并没有路由表,他只能按照预先设定的不同网段来进行转发。网关最重要的一点就是端口映射,子网内用户在外网看来只是外网的IP地址对应着不同的端口,这样看来就会保护子网内的用户。

--关于Socket:
Socket概念:应用层与TCP/IP协议族【应用层与传输层之间】通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面。对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

 Socket组成:IP地址+端口号,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础。

 Socket套接字: 网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识符套接字。

 Socket原理机制:通信的两端都有Socket;网络通信其实就是Socket间的通信;数据在两个Socket间通过IO传输 。

---端口:
1.用于区分不同的应用程序;
2.端口号范围为0-65535,其中0-1023是系统所保留;

---针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能有四大类:
    1.InetAddress:标识网络硬件资源;表示IP地址相关信息;
        这个类没有构造方法,通过静态方法来获取实例,然后可以调用相应的API。

    2.URL:统一资源定位符,通过URL可以直接读取或者写入网络上的数据;这个通过流进行操作,涉及到编码问题;

    3.Sockets:使用TCP协议,实现网络通信的Socket相关的类;
        相关操作类:
        客户端的Socket类:客户端套接字;get流;
                ----创建Socket对象,指明需要连接的服务器的地址和端口号;
                ----连接建立后,通过输出流向服务器端发送请求信息;
                ----通过输入流获取服务器响应的信息;
                ----关闭相关资源;

        服务器端的ServerSocket类:服务器套接字;
                ----创建ServerSocket对象,绑定监听端口;
                ----通过accept()方法监听客户端请求;
                ----连接建立后,通过输入流读取客户端发送的请求信息;
                ----通过输出流向客户端发送响应信息;
                ----关闭相关资源;

        Socket通信模型:
                                    建立连接:创建Socket和ServerSocket;
                                    开始通信:输入输出流、读写操作;
                                    结束通信:关闭流、关闭Socket;

    4.Datagram:使用UDP协议,将数据保存在数据报中,通过网络通信;
        相关操作类:
        DatagramPacket:表示数据报包;
        DatagramSocket:进行端到端通信得类;

        服务端实现:
            ----创建DatagramSocket,指定端口号;
            ----创建DatagramPacket;
            ----接收客户端发送的数据信息;
            ----读取数据;
            
        客户端实现:
            ----定义发送信息;
            ----创建DatagramPacket,包含将要发送的信息;
            ----创建DatagramSocket;
            ----发送数据;

1.有一条TCP连接,它的最大报文段长度为4KB,TCP拥塞窗口为24KB,这时候发生超时,那么该拥塞窗口变为了4kb。
答:因为在TCP报文中,当发生超时事件,阈值被设置成当前拥塞窗口的一半,而拥塞窗口被设为一个最大报文段,也就是4KB;

以上是关于图解TCP'IP的主要内容,如果未能解决你的问题,请参考以下文章

《图解TCP/IP》读书笔记

《图解TCP/IP》--TCP/IP协议分层模型与通信

图解 TCP/IP 协议

《图解HTTP》--TCP/IP初识

图解TCP/IP——第2章TCP/IP基础知识

图解 Google V8 # 05:函数表达式的底层工作机制