Skip to content

jckmilk/computer-network

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

5层协议

物理层

  物理层是指光纤、电缆或电磁波等真实存在的物理媒介。

链路层

  链路层 信息以帧为单位,帧就是一段有限的0/1序列。链路层协议的功能就是识别其中的0/1序列,常见的链路层协议有以太网协议,wifi协议,ppp协议,其将网络层的数据可靠的传递给相邻节点的网络层。在帧中存在收信地址和送信地址,还存在校检序列。

网络层

 主要实现端到端的数据传输。网络中的路由器将链路层中的帧进行拆分,然后封装为另一个帧,帧的格式取决于帧刚经过链路层协议和将要经历的链路层协议,从而为不同的网络提供通信。提供寻址的功能。主要的网络层协议为IP协议。

传输层

  传输层提供端到端的通信和差错服务,同时还管理不同端口进程的通信,常见的传输层协议有TCP协议,UDP协议。常见的端口

应用层

  应用层协议定义了不同应用的内部协议规范,如HTTP协议,FTP协议,IMAP协议

以太网协议和WIFI协议

以太网帧格式

  |||   帧的最初7个bytes被称为序言,主要是为了同步   SFD为起始信号   DST和SRC为目的地和出发地,为MAC地址,只能在同一个以太网中被识别   Type分为IPV4和ARP等数据   FCS为校检序列

集线器和交换器

  集线器是物理层设备 主要采用广播的方式检查目的计算机,不允许多路同时通信   交换机中存有MAC地址,将帧发往对应的端口,允许多路通信

WIFI

WIFI的共作方式相当于集线器式的传播。

IP协议

IP协议的作用是在网络层面上连接各个局域网。 IP数据包 包括头部,数据 数据部分是要传送的信息,头部是为了能够实现传输而附加的信息。

IP包的格式

IP协议分为IPV4和IPV6的协议

 IPV4  其中IP的头部包含多个区域,红色的发出地和目的地都是IP地址,IP地址为4bytes 32bit。  IP地址总共分为5类,常用的有A,B,C三类,包含网络ID和主机ID,前半部分区分局域网,后半部分区分局域网主机,子网掩码表示分界:  A               1.0.0.0               126.255.255.255             255.0.0.0  B               128.0.0.0             191.255.255.255             255.255..0.0  C               192.0.0.0             223.255.255.255             255.255.255.0 IPV4 VS IPV6  黄色区域(同名区域) version(4位)表示版本 其它表示发出地和目的地的ip地址。  蓝色区域(名字发生变动的区域)  Time to Live 存活时间 表示IP包的最大生存时间。IPV6(hop limit)  Type of service 服务类型 用来给IP数据包进行分级 Protocol 协议(Next Header in IPv6)。Protocol用来说明IP包Payload部分所遵循的协议,也就是IP包之上的协议是什么。它说明了IP包封装的是一个怎样的 高层协议包(TCP? UDP?)。 我们看一下IPv4和IPv6的长度信息。IPv4头部的长度。在头部的最后,是options。每个options有32位,是选填性质的区域。一个IPv4头部可以完全没有options 区域。不考虑options的话,整个IPv4头部有20 bytes(上面每行为4 bytes)。但由于有options的存在,整个头部的总长度是变动的。我们用IHL(Internet Header Length)来记录头部的总长度,用Total Length记录整个IP包的长度。IPv6没有options,它的头部是固定的长度40 bytes,所以IPv6中并不需要IHL区域。Payload Length用来表示IPv6的数据部分的长度。整个IP包为40 bytes + Payload Length。

IPv4中还有一个Header Checksum区域。这个checksum用于校验IP包的头部信息。Checksum与之前在小喇叭中提到的CRC算法并不相同。IPv6则没有checksum区域。IPv6包的校验依赖高层的协议来完成,这样的好处是免去了执行checksum校验所需要的时间,减小了网络延迟 (latency)。

Identification, flags和fragment offset,这三个包都是为碎片化(fragmentation)服务的。碎片化是指一个路由器将接收到的IP包分拆成多个IP包传送,而接收这些“碎片”的路由器或者主机需要将“碎片”重新组合(reassembly)成一个IP包。不同的局域网所支持的最大传输单元(MTU, Maximum Transportation Unit)不同。如果一个IP包的大小超过了局域网支持的MTU,就需要在进入该局域网时碎片化传输(就好像方面面面饼太大了,必须掰碎才能放进碗里)。碎片化会给路由器和网络带来很大的负担。最好在IP包发出之前探测整个路径上的最小MTU,IP包的大小不超过该最小MTU,就可以避免碎片化。IPv6在设计上避免碎片化。每一个IPv6局域网的MTU都必须大于等于1280 bytes。IPv6的默认发送IP包大小为1280 bytes。

ARP协议

IP地址和MAC地址是通过ARP协议实现的,每一台主机和路由中都有一个ARP cache 用于存储Ip地址和MAC地址的对应关系。

ICMP协议

ICMP协议介于网络层和传输层的协议,主要功能是传输网络诊断信息。 ICMP传输两类信息,一类是错误信息,用来诊断网络故障 一类是咨询信息。 ICMP协议是实现ping命令和traceroute命令的基础。这两个工具常用于网络排错 重新定向(redirect)属于错误信息。当一个路由器收到一个IP包,对照其routing table,发现自己不应该收到该IP包,它会向出发主机发送重新定向类型的ICMP,提醒出发主机修改自己的routing table

UDP协议

UDP(User Datagram Protocol)传输与IP传输非常类似。你可以将UDP协议看作IP协议暴露在传输层的一个接口。UDP协议同样以数据包(datagram)的方式传输,它的传输方式也是"Best Effort"的,所以UDP协议也是不可靠的(unreliable)。那么,我们为什么不直接使用IP协议而要额外增加一个UDP协议呢? 一个重要的原因是IP协议中并没有端口(port)的概念。IP协议进行的是IP地址到IP地址的传输,这意味者两台计算机之间的对话。但每台计算机中需要有多个通信通道,并将多个通信通道分配给不同的进程使用(关于进程,可以参考Linux进程基础)。一个端口就代表了这样的一个通信通道。正如我们在邮局和邮差中提到的收信人的概念一样。UDP协议实现了端口,从而让数据包可以在送到IP地址的基础上,进一步可以送到某个端口。

端口和socket

端口(port)是伴随着传输层诞生的概念。它可以将网络层的IP通信分送到各个通信通道。UDP协议和TCP协议尽管在工作方式上有很大的不同,但它们都建立了从一个端口到另一个端口的通信

TCP协议

IP协议和UDP协议采用的是数据包的方式传送,后发出的数据包可能早到,我们并不能保证数据到达的次序。TCP协议确保了数据到达的顺序与文本流顺序相符。 在每收到一个正确的、符合次序的片段之后,就向发送方(也就是连接的另一段)发送一个特殊的TCP片段,用来知会(ACK,acknowledge)发送方:我已经收到那个片段了。这个特殊的TCP片段叫做ACK回复。如果一个片段序号为L,对应ACK回复有回复号L+1,也就是接收方期待接收的下一个发送片段的序号。如果发送方在一定时间等待之后,还是没有收到ACK回复,那么它推断之前发送的片段一定发生了异常。发送方会重复发送(retransmit)那个出现异常的片段,等待ACK回复,如果还没有收到,那么再重复发送原片段... 直到收到该片段对应的ACK回复(回复号为L+1的ACK)。

TCP连接

三次握手 建立连接的最重要目是让连接的双方交换初始序号(ISN, Initial Sequence Number) 四次挥手

应用层

DNS服务器

域名和IP地址的对应关系存储在DNS服务器(DNS server)中。所谓的DNS服务器,是指在网络中进行域名解析的一些服务器(计算机)。这些服务器都有自己的IP地址,并使用DNS协议(DNS protocol)进行通信。DNS协议主要基于UDP,是应用层协议(这也是我们见到的第一个应用层协议) 每一个节点有不同的域名记录范围,DNS服务器构成一个分级(hierarchical)的树状体系 ,树的末端是真正的域名/IP对应关系记录。一次DNS查询就是从树的顶端节点出发,最终找到相应末端记录的过程

HTTP协议

get方法 服务器受到get请求后,会将特定资源送给客户,通过改写URL的方式实现的 post方法 客户端向服务器提交数据 样例请求中有一行头信息。该头信息的名字是Host。HTTP的请求必须有Host头信息,用于说明服务器的地址和端口。HTTP协议的默认端口是80,如果在HOST中没有说明端口,那么将默认采取该端口。在该例子中,服务器的域名为www.example.com,端口为80。域名将通过DNS服务器转换为IP地址,从而确定服务器在互联网上的地址。

根据早期的HTTP协议,每次request-reponse时,都要重新建立TCP连接。TCP连接每次都重新建立,所以服务器无法知道上次请求和本次请求是否来自于同一个客户端。因此,HTTP通信是无状态(stateless)的。服务器认为每次请求都是一个全新的请求,无论该请求是否来自同一地址。

DHCP协议

DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址、DNS域名服务器地址等。一台电脑只要接上网,就可以通过DHCP协议获得相关配置,从而顺利的畅游网络。 电脑接上网络后,DHCP客户端发现新连通的网络,会在该网络上找DHCP服务器。DHCP服务器将给电脑提供合理的网络配置,并把设置信息传回本机 DHCP服务器的首要任务是分配IP地址。分配的IP地址要符合以下原则: 1.地址合法,即对应该局域网的IP地址和子网掩码。 2.地址空闲,同一网络下没有其他设备使用该地址. 通信过程 DHCP底层使用UDP协议 DHCP通信分为四步: 1.Discovery:客户机发广播,搜寻DHCP服务器 2.offer:DHCP服务器发出邀请,提供一个可用的IP地址。 3.Request:客户机正式请求使用该IP。 4.Acknowledge:DHCP服务器确认,并提供其他配置参数。 每一步的通信内容都放在一个符合DHCP格式的数据包中。数据包中可以包括客户机IP地址、服务器IP地址、客户的硬件MAC编号等字段,还能附加多条网络设置参数。当某些信息未知时,如客户机的IP地址,相应的字段可以填成0

SSL和TLS协议

以上两种协议为加密协议

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published