TCP/IP分层模型中,通信界定地址:
物理地址:在交换机中进行通信的,
以太网地址,MAC地址;
功能:真正的用于本地通信的地址;
使用范围:本地局域网内部且不跨路由设备;
逻辑地址:(IP地址)
在TCP/IP协议栈中,逻辑地址被定义为IP地址;
功能:界定主机到主机的通信地址:点到点通信;逻辑地址仅用于主机定位,不用于真正的通信;
使用范围:全球互联网;
逻辑端口号:(确定每个进程的标识符)
在TCP/IP协议栈中
功能:界定进程到进程的通信;
逻辑端口号的组成:
16bits二进制构成:其表示范围0-65535
0:特殊端口号,不做定义;
1-1023:固定服务端口(一般用于服务器端);
FTP:20/TCP,21/TCP
SSH:22/TCP
Telnet:23/TCP
SMTP:25/TCP
DNS:53/TCP,53/UDP
DHCP:
DHCPS:67/UDP
DHCPC:68/UDP
TFTP:69/UDP
HTTP: 80TCP
POP3: 110/TCP
IMAP4: 143/TCP
SNMP: 161/UDP,162/UDP
HTTPS: 443/TCP
1024-45121:半固定服务端口;也可以称为注册端口(一般用于本地);
mysql:3306/TCP
Tomcat:8080/TCP,8009/TCP,8005/TCP,8040/TCP
Memcached:11211/TCP
其余端口:可自由分配使用的端口号;
逻辑地址:逻辑端口号——套接字(Socket)
能够界定特定主机上的特定应用程序服务进程:
TCP协议:
1.面向连接:
1)通信开始之前,必须先建立通信双方主机之间的TCP通信连接;
2)在整个通信过程中,必须维持通信双方主机之间的TCP通信连接的稳定性;
3)在通信结束之后,必须先拆除通信双方主机之间已建立的TCP通信连接
TCP协议建立连接的过程:三次握手
a)通信请求发起方,创建一个无数据报文,将其中的SYN标志位 置1;
b)接收方在收到建立连接的请求之后,根据该报文的目标端口号判断本地是否有监听此套接字的进程;如果有,即返回确认消息;创建一个无数据报文,将其中的ACK标志位 置1,同时将SYNC标志位 置1,用户向对方请求建立同步连接;
c)通信请求发起方,在创建一个无数据报文,将其中的ACK标志位 置1;
TCP协议拆除连接的过程:四次挥手
a)由任何一方,在数据传输结束之后,向另一方发送一个自己创建的无数据报文,其中FIN标志位 置1;
b)收到连接断开请求的一方,会对此请求信息予以确认,创建一个无数据报文,其中ACK标志位 置1;
c)此前收到连接断开请求的一方,会再次创建一个无数据报文,将其中的FIN标志位 置1,向对方请求断开连接;
d)对方在收到此请求报文之后,在创建一个无数据报文,将其中的ACK标志位 置1;确认断开连接的请求;
TCP协议的有限状态机(TCP FSM)
客户端:
客户端的状态可以用如下的流程来表示:
服务器:
服务器的状态可以用如下的流程来表示:
TCP协议首部:
第一行:
第一字段:源端口号,16bits;
第二字段:目标端口号,16bits;可与手动指定,可以通过 /etc/services文件判断自动解析应用层协议获得;
第二行:
序列号:TCP协议将大数据报文分段的顺序编号,取值范围0~2^32-2;默认情况下,第一个数据段的序列号为随机选择,以后的数据段的序列号通过计算得到;
第一段:随机产生
后续其他数据段:前一数据段的数据段序列号 + 前一数据段的数据部分大小 + 1;
第三行:
确认号(下一段的序列号):
接收到的最后一个数据段的下一个数据段的序列号;取值范围1~2^32-1
第四行:
第一字段:4bits报文首部长度,通常报文首部长度为24Bytes-60Bytes;
第二字段:标志位;12bits
前三位:保留位;
4-6位:特殊标志位;
URG:紧急指针标志位;优先转发标志位;URG置1,后面的16bits的紧急指针才能生效;
ACK:确认标志位;保证数据传输可靠性;
PSH:推进标志位;
RST:重置标志位;
SYN:同步标志位;三次握手建立连接时必选的标志位;
FIN:结束标志位;四次挥手拆除连接时必选的标志位;
第三字段:窗口大小16bits;一次并发传输的数据段的数量;
第五行:
第一字段:数据段校验和,16bits,保证数据的完整性;
第二字段:紧急指针,16bits,在URG标志位 置1,那个数据段更紧急;
第六行:
选项:TCP协议分段的标准;TCP协议的数据分段时间戳;...
TCP协议的确认机制:
1.发送方在接受哦到接收方返回的确认数据之前,不会继续发送后续的数据段;
2.在指定的时间内,发送方没有接收到接收方返回的确认数据,则重新发送此前发送的数据段;
数据传输过程:
发送方打算把应用数据发送给接收方:
1.讲给出的主机名解析为此次通信的目标主机ip地址:
2.将应用层协议解析为传输层协议+传输层端口号的组合(套接字),进而完成传输层封装;
3.如果传输层使用TCP协议,则还需要为TCP协议通信建立通信连接;
4.如果需要建立TCP连接,必须能够在网络层正确封装IP地址以及在数据链路层正确封装MAC地址;
5.在ARP缓存中,如果么没有对应的目标IP地址条目信息,则需要广播ARP解析目标主机地址;
6.解析获得目标主机的MAC地址后,则可以通过三次握手建立TCP连接;
7.为应用层应用程序提供数据发送;
8.在数据传输完成之后,需要拆除TCP连接;
子网掩码(Netmask)
组成:32bits二进制组成,与IPv4的地址位数相同;以点分十进制进行表示;
作用:标识IPv4地址中的网络部分和主机部分各占多少个二进制位;凡是网络部分就用"1"表示,
凡是主机部分,就用"0"表示;
A类地址的标准子网掩码:255.0.0.0
B类地址的标准子网掩码:255.255.0.0
C类地址的标准子网掩码:255.255.255.0
将IPv4的地址与其相对应的子网掩码做逻辑就与运算,得到的而结果时候:
该IPv4地址所属的网络范围;
网络地址:主机位全都是"0"的IP地址;也被称为网络名称;也可以称为逻辑网段;
定向广播地址:主机位全都是"1"的IP地址;在特定的逻辑网段中能够被应用的广播地址;
以上两个地址,通常是不能分配给主机使用的;
在一个逻辑网段中,主机位全"0"和主机位全"1"的地址,必须排除在可以使用地址范围之外;
172.16.72.1 255.255.0.0 --> 172.16.0.0
子网掩码的标识方法:
1.全掩码表示:172.16.72.1/255.255.0.0
2.前缀表示法:172.16.72./16
192.168.0.1/16 CIDR,Classless Inter-Domain Routing,无类域间路由;
10.1.1.1/28 变长子网掩码;
结论:
主机通过将自身的IP地址和目标主机的IP地址分别于自己的子网掩码进行逻辑与运算,
最终得到的结果就是两台主机的逻辑网络地址;
然后将此二结果进行比较,如果相同,则表示此二主机在同一逻辑网络范围之内,
因此可以直接使用ARP协议获取对方的MAC地址,从而实现通信;如果不相同,
则意味着此二主机在不同的逻辑网络范围之中,于是必须借助于网关才能实现二主机的相同通信;
网关:可以理解为一个逻辑网络的门户,或者是出入口;现在多使用路由器充当网关设备;
注意:一旦数据传输经过网关等路由设备,则其数据链路层的封装格式会彻底改变;
即:重新封装数据的源MAC地址及目的MAC地址;
对于主机来说,在一次通信的过程中,
需要使用配置在自身网络设备接口上的子网掩码判断主机与自身IP地址是否在同一逻辑网段;
对于路由器来说,需要利用路由表中路由条目上个所携带的子网掩码,
来判断目标主机所 在的网络地址,是否存在于本地路由表中,
如果有,则按扎奥路由表指示进行转发;否则直接丢弃不予转发;
转载于:https://blog.51cto.com/liujingyu/2062489