不同的计算机之间如何同信?
可以用网线将连接各台电脑再将网线集中起来——集线器
但是每次每次发送消息是因为没有地址的概念会发送给所有人,且计算机同时发送消息会造成干扰
于是我们采用了更好的设备——交换机
进入交换机的设备都有一个MAC地址(全球唯一的,设备出场时就设定好的数据链路层地址),A计算机再发送一个报文时会把自己的MAC地址和目标MAC地址也写在报文中,但是交换机并不知道该报文要发给那一个接口于是发送给了所有的接口(这个操作叫泛洪),其他计算机在接收到报文后发现mac地址和自己的对不上会舍弃报文(正真的目标计算机会接收报文),经过这次操作后交换机保留了计算机A的mac地址的接口下次发送报文给计算机A时就不需要泛洪了。(总结:交换机会记录mac地址对应的接口)
为了在网络层中传输则出现了ip地址
计算机中ip地址和mac地址通常绑定在一起,且记录在ARP记录表上(由ip地址获得mac地址的过程叫做ARP协议)
由于交换机会将经过自己的mac地址都保留下来(会导致交换机的mac地址表无法容纳),另外由于交换机的泛洪特性会导致效率问题
因此我们将不同的网路隔离开来,形成不同的网段,让交换机只用来传输同一网段的消息,于是有了子网掩码的概念,例如子网掩码为255.255.255.0,前三段有值,则将其转换成而进制,同样将ip地址转换成二进制去ip地址在子网掩码前N位有值的数作为子网id,同过子网id来判断他们是否在同一个网段
对于不在当前网段需要发往外网的消息则需要专门的设备帮忙转发——路由器
例如:计算机A通过子网掩码计算出目标子网id发现其不在自己的网段,于是它需要将报文发给路由器来帮忙发到外网(计算机A知道要发给那个路由器是因为它记录了网关)
那路由器在收到报文之后怎么知道该交给谁呢?
路由器中有个路由表记录了“目标网段和其子网掩码的下一跳”,于是就知道对应网段下一步应该交给哪一台路由器。
路由表是靠人工维护的当路由器非常多时则会维护非常困难,于是就有了OSPF,BGP等自动管理路由表的协议。
带端口的ip通信——UDP协议(特点:简单粗暴,不稳定会丢包)
比UDP更可靠的协议——TCP协议
因为网路是不稳定的,于是在中途的传输过程中会丢包,于是TCP协议规定在对方接收到消息时必须回应,保证了消息必达。发送失败时从心发送。
另外采用分包发送给每个配置序号,那么当消息发送失败时不需全部重新发送只需发送丢失的部分即可。也解决了接受方收到数据包的乱序问题,且接收方收到数据包后也要根据序号进行答复。
TCP的三次握手(连接的建立)
(1)发送方发送连接请求
(2)接收方回应请求并表示连接意愿
(3)发送方回复(保证连接的必达的条件)
TCP的四次挥手(断开连接)
(1)发送方发送断开请求
(2)接收方回应请求
【2和3之间存在时间间隔因为接收方在收到请求后不能马上断开必须先收完消息】
(3)接收方表示断开意愿
(4)发送方回复(保证连接的必达的条件)
UPD和TCP是所有应用层协议的根基,都是在其基础之上发展而来
解决ip地址不够用的问题?
一个网段的计算机公用一个公网ip,网段内计算机用的都是内网ip,当计算机A向外网发送报文时会将报文转交给网关路由器帮忙转发(网关路由器会建立端口映射表记录着源内网ip和源端口和公网端口)网关路由器在接收到消息后通过端口映射表就可以知道要将报文转发给那一台内网ip的计算机和对应端口(这就是NAT协议)。
内网的ip地址和网关由DHCP协议动态分配。