作用:规定应用程序的数据交互格式,直接为用户的应用进程提供服务。
常用协议: HTTP FTP
作用:负责为两个进程之间的通信(不一定是不同主机)提供服务,建立”端口到端口”的通信。分割成段,指定序列号,可靠传输。
常用协议:TCP UDP
误码校验,校验和,解决误码问题。
指定序列号,解决重复、失序问题
停止等待ARQ\连续ARQ,结合超时重传(选择重传),确保可靠传输,解决丢包问题。
可变大小的滑动窗口,流量控制(接受方窗口)、拥塞控制(发送方窗口)降低丢包率
复用:多个应用层进程可同时使用下面运输层的服务。
分用:把收到的数据分别交付给上面应用层中相应的进程。
端口:每一个使用网卡的程序的编号,从0到65535之间的一个整数。
UDP协议:无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供“尽最大努力交付”。
TCP协议:面向连接的,数据传输的单位是报文段,能够提供可靠的交付。
TCP 分割报文:如果HTTP 请求消息比较长,超过了MSS 的长度,这时 TCP就需要把应用层的报文拆解成数据段进行发送,而不是一次性发送所有数据,报文会被以MSS 的长度为单位就行拆分,在每个被拆分的数据段加上TCP 头部信息,然后交给IP模块来发送数据。
TCP协议中的两个端口 :一个是客户端监听的端口,通常是随机生成的;一个是Web服务器监听的端口,HTTP默认端口号是80,HTTPS默认端口号是443。
TCP连接:
TCP协议三次握手、四次挥手
作用:负责为分组交换网上/计算机网络的两台主机之间的通信提供服务,建立”主机到主机”的通信。报文分组,查表转发。
常用协议:IP ARP ICMP
IP协议背景:以太网协议是数据链路层的常用协议,以太网通过广播发送数据时,局限于子网络内部。因此,我们需要一种机制,能够区分哪些地址属于同一个子网络。如果是同一个子网络,就采用广播方式发送,否则就采用”路由”方式向不同的子网络分发数据包。
IP协议:规定主机的网络地址。作用主要有两个,一是为每一台主机分配IP地址,二是确定哪些地址在同一个子网络。
ARP协议背景:以太网协议是数据链路层的常用协议,以太网发送数据时,必须知道对方的MAC地址,即在网络层发出的数据包中需要有目标主机的MAC地址,而IP数据包只有对方的IP地址是已知的。因此,我们需要一种机制,能够从IP地址得到MAC地址。
ARP协议:在子网中通过广播的方式,根据 IP 地址查询相应的以太网 MAC地址。
ARP协议实现:在以太网中以广播的形式,发出一个包含它所要查询主机IP地址的数据包(在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个”广播”地址)。当前子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,向对方报告自己的MAC地址,否则就丢弃这个包。
ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
作用:负责为子网中的两台主机之间的通信提供服务,点对点地传送数据。封装成帧(电信号分组方式),查表转发(以太网交换机里的帧转发表),误码检测,广播,。
常用协议:Ethernet
数据传输:在两个相邻结点之间传送数据时,数据链路层将网络层交下来的数据包组装成帧(framing)。如果两台主机在同一个子网络,可以通过ARP协议得到服务端IP对应的MAC地址,然后采用广播方式发送。如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的网关(gateway),让网关去处理,采用路由方式向不同的子网分发数据包。
Ethernet协议:规定电信号分组方式。以太网规定,一组电信号构成一个数据包,叫做”帧”(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。以太网数据包必须知道接收方的MAC地址,然后才能发送。
MAC地址:网卡地址。连入网络的所有设备,都必须具有”网卡”接口,数据帧必须是从一块网卡,传送到另一块网卡。IP地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。
广播:它不是把数据包准确送到接收方,而是向当前子网络内所有计算机发送广播,让每台计算机取出接收方的MAC地址自己判断,是否为接收方。如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包,这种发送方式就叫做广播。
作用:负责在不同的传输媒介上传输比特流,为数据链路层提供比特流的透明传输服务,通常分析时可以忽略。
规定了信号的编码、调制方式,网口的物理特性等,在两个网口之间传送比特流,即0和1电信号,单位是比特。
互联网分层结构的好处:上层的变动完全不涉及下层的结构。数据发送时,由上层向下层封装。
在浏览器中输入 url 地址 ->> 显示主页的过程
客户端通过应用层发起HTTP请求,发出HTTP请求报文:请求头+请求数据;
运输层接收HTTP请求报文,进行分段,在头部加入客户端和服务端的端口号、协议类型,发出TCP报文:TCP头部 + 数据段;
网络层接收TCP报文,在头部加入客户端和服务器端的IP地址,发出IP数据报:IP头部 + TCP报文;
数据链路层接收IP数据报,通过ARP协议的广播形式,在目的主机所在的子网中根据其P地址得到MAC地址,在头部加入客户端和服务器端的MAC地址,发出MAC数据帧:头部 + IP数据包;
物理层接收MAC数据帧,通过网卡接口在传输媒体传送比特流到服务器。
服务器通过物理层解析比特流,得到MAC数据帧;
数据链路层从MAC数据帧中解析出头部MAC地址和IP数据包,在子网中通过Ethernet协议广播头部MAC地址和IP数据包,寻找对应MAC地址的主机,将IP数据包发出。服务器验证头部MAC地址是否与自己的MAC地址相同,如果不同,弃包;如果相同,接收IP数据包;
网络层从IP数据包中解析出头部IP地址和TCP报文,将TCP报文发送到指定IP地址的网卡(一个主机可能有多个网卡)。服务器的网卡验证头部IP地址是否与自己的IP地址是否相同,如果不同,弃包;如果相同,接收TCP报文;
运输层从TCP报文中解析出头部端口号、协议类型和HTTP请求报文,通过解析出的协议类型,将HTTP请求报文发送到与头部端口号相同的服务器网卡的通信端口(三次握手、四次挥手);
应用层得到HTTP请求报文,并解析出请求头和数据,服务器根据请求头和请求数据将响应值按照指定格式输出。
在下一个过程中,服务器变成了发送数据方,客户端变成了接收数据方。
基于OSI七层参考模型的报文、数据段、数据包、数据帧的区别
网卡:将数字信息转换成电信号,负责执行这一过程的是网卡,要控制网卡还需要网网卡驱动程序。网卡驱动从IP模块抓取到包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。
最后网卡会将包转为电信号,通过网线发送出去。
交换机的设计是将网络包原样转发到目的地。交换机工作在MAC层,是基于以太网设计的,也称为二层网络设备。
路由器是基于IP设计的,俗称三层网络设备。网络包经过交换机之后,现在到达了路由器,并在此被转发到下一个路由器或目标设备。当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由器查询转发目标,再由相应的端口作为发送方将以太网发送出去。(以太网只能在相同子网内广播MAC数据帧)
计算机网络:分组交换
路由器是实现分组的关键构件,其任务是转发收到的分组。在发送报文之前,先把较长的报文划分成为一个个更小的等长数据段,在每一个数据段前面,加上一些由必要的控制信息组成的首部(header),就构成了一个分组(packet)。路由器用来进行分组交换。路由器收到一个分组,先暂时存储一下,检查其首部,查找转发表,按首部中的目的地址,找到合适的接口转发出去,把分组交给下一个路由器。这样一步一步地以存储转发的方式,把分组交付最终的目的主机。
计算机网络之子网划分
子网划分技术通过借用IP地址的若干位主机位来充当子网地址,从而将原来的网络分为若干个彼此隔离的子网络。
详解网关和路由器的区别、网关和路由的区别
只要确定了主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做”套接字”(socket),有了它就可以进行网络应用程序开发了。