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地址是否在同一逻辑网段;
对于路由器来说,需要利用路由表中路由条目上个所携带的子网掩码,
来判断目标主机所    在的网络地址,是否存在于本地路由表中,
如果有,则按扎奥路由表指示进行转发;否则直接丢弃不予转发;