网络协议及其基础知识
计算机网络协议基础
1、前提了解
IP :是一个网络虚拟地址。【InetAddress表示IP地址,无论是IPV4,还是IPV6,Inet4Address表示IPV4,Inet6Address表示IPV6。】
【SocketAddress表示不依赖于具体协议的套接字地址抽象类,InetSocketAddress是其唯一的实现类子类】
MAC :是网卡的物理地址。
端口 :用来区分不同程序应用的。
URL(统一资源定位符) :分辨网络上资源的。
【URI(统一资源标识符):用来标识抽象或物理资源的一个紧凑字符串,用来区分唯一的】
分层 :OSI网络通信协议模型:有7层 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP协议族 :有4层 链路层(物理层、数据链路层)、网络层、传输层、应用层(会话层、表示层、应用层)
应用层关心应用程序的细节,下三层处理通讯的细节。
应用程序通常是用户进程,下三层一般在内核执行。
应用层和传输层使用的是端到端协议
网络层提供的是逐跳协议
网络层的ip协议是一种不可靠的服务,只是将数据尽可能快的从源结点送到目的结点,不提供可靠性保障。
运输层的TCP为IP协议提供了一个可靠的运输
链路层是负责数据帧的格式和大小等,协议有:以太网、IEEE 802.2/802.3、PPP(点对点协议,适用于广域网链路)。

2、TCP/IP协议簇中的协议

ICMP是IP协议的附属协议,当使用ping的时候就是用到ICMP协议
ARP是将IP地址解析为硬件地址(MAC地址)
RARP是发出要反向解析的物理地址并希望返回其对应的IP地址


3、IEEE802与以太网协议的帧区别

IEEE802.3规定数据部分必须至少为38字节,而对于以太网,则要求最少要46字节,为了保证这一点,不足的空间需要插入填充字节PAD
IEEE802.3的数据最大可以到1492字节,而以太网可以到1500字节。
4、环回接口
环回地址一般是127.0.0.1,传给环回地址的任何数据均作为IP输入
传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定义
任何传给该主机IP地址的数据均送到环回接口

作为NAT,要成功,需要满足三个条件
满足列表(列表里绑定了本主机的IP)需要敲命令将列表里的IP地址转换成外部接口的地址
内部接口进入
外部接口出去
主机想发送的数据从内部接口进来,再从外部接口出去,只要是列表里的IP地址的话就转化成自己设定的虚拟IP地址。
在NAT模式情况下,如何指定某一台主机能识别到NAT模式下的主机的真实IP?
答:使用环回接口。由于127.0.0.1不是主机列表里的真实IP地址,所以从外部接口出去时不会转化成自己设定的虚拟IP地址。
MTU和路径MTU
MTU是数据帧的最大值限制,IEEE802.3和以太网的值分别为1492和1500字节。
路径MTU是两台通讯主机路径中的最小MTU,称为路径MTU,路径MTU在两个方向上不一定是一致的。
①TCP/UDP:
<1>TCP与UDP是不同的传输协议,所以拥有各自的65535个端口可以使用;
<2>同一个传输协议内的端口不可以重复,而不同的传输协议(即TCP与UDP就是不同)可以相同【但,最好不要相同】;
<3>TCP:
(1)是面向连接的,安全的,可靠的,效率比较低的;
(2)需要三次握手,四次挥手;
(3)在JAVA中,服务器端创建ServerSocket以及使用其accept()方法来接收客户端的连接,客户端创建Socket以及使用其connect()方法可连接到服务端;【双方都需要绑定端口和地址--->bind()】
(4)流模式【保证数据顺序】
UDP:
(1)是非面向连接的,不安全,不可靠,易丢包,有大小限制,但效率高;
(2)在JAVA中,服务器端与客户端都是用DatagramSocket (创建Socket)与DatagramPacket(创建包裹),
在DatagramSocket 中有send与receive,而DatagramPacket过程就是封装包裹和拆包裹.
(3)数据报模式【不保证数据顺序】
MTU与MSS的区别
MTU:maximum transmission unit 最大传输单元,是规定数据链路层的最大传输限制。
MSS:maximum segment size 最大分段大小,是传输层TCP协议里规定的数据包每次传输的最大数据分段,由发送端通知对端TCP,在每个分节中对端能发送的最大TCP数据,MSS=MTU - IP header(20字节) - TCP header(20字节) ,若链路层使用的是以太网MTU1500,则MSS为1460,若是IEEE802.3 MTU1492,则MSS为1452。
注意:在TCP建立连接的过程中会协商双方的MSS,通讯双方会根据双方提供的MSS值得最小值作为本次连接的最大MSS值。
分段和分片的区别
分段:发生在传输层。
分片:发生在网络层。
由于TCP协议规定了MSS的大小, 每个TCP数据报在组成前其大小就已经被MSS限制了,所以只要数据大小超过MSS了就会发生分段。而UDP协议没有这一规定,从而导致分片常常是发生在UDP协议中的,UDP在传输层分不了段,所以只能通过网络层ip来分片,
TCP的分段是针对应用层的数据来说的,比如应用层传下来了10K的数据,那么以链路层为以太网(MTU:1500),IP最小头部为20字节,TCP协议头部分20字节的前提下,可知MSS=1500-20-20=1460(Byte),将10KB数据以每1460B为一段数据分成若干个MSS,到了网络层就不需要分片了。MSS的存在就避免了网络层分片的发生。
IP层的分片是针对传输层中使用UDP协议来说的,如果使用UDP发送数据,UDP并不知道如何分段,那么到了IP层就需要进行分片,分片的原则根据MTU,以链路层为以太网(MTU:1500),IP最小头部为20字节,UDP协议的头部大小为8字节的前提下,那么分UDP最大的数据负载就为1500-20-8=1472(Byte)。
