美文网首页
TCP、UDP和端口

TCP、UDP和端口

作者: Caesar_emperor | 来源:发表于2019-11-24 15:06 被阅读0次

    一.先来谈谈OSI七层模型

    物理层(比特流)-》数据链路层(帧)-》网络层(分组[数据报])-》传输层(分段)-》会话层-》表示层-》应用层

    1.物理层(理解为网卡)

    用来定义物理设备的标准,比如网线类型,光纤类型,各种传输介质传输速率等。

    2.数据链路层:(交换机)[这层的协议的代表包括PPP STP SDLC等,这一层的单位是帧]

    目的:从物理层传来的比特流可能传输有错,或者传输漏掉。所以格式化数据,提供错误检测和纠正,从而保证数据的可靠。
    流程:将比特流组合成字节,再将字节组合成帧。交换机对帧解码,并根据帧中包含的信息发送出去。
    -》简单说就是:封装成帧、透明传输、差错检测
    1)封装成帧:就是在数据前后分别添加首部的帧开始符和尾部的帧结束符,这样就构成了帧。 
    2)透明传输:用字节填充法,在每个标题开始前,传输结束前均填充ESC(在非帧边界的控制字符插入转义字符),解决透明传输的问题。

    3)差错检测:传输过程中可能会出现差错(比特差错),为保证可靠性,在数据链路层广泛使用了循环冗余检验CRC的检错技术

    3.网络层:(路由器,IP协议)

    目的:从数据链路层发送来的数据多个节点发送到目的地,为了知道目的结点是哪个,最佳路径是什么,选择合适的网间路由和交换结点。
    数据包是包含在帧中,包中封装了网络层包头,如源站点、目的站点信息等,如果你还在讨论一个ip地址,那么你是在这层的问题。
    流程:将网络地址翻译成物理地址,决定了如何将数据从起始地发送到目的地

    4.传输层:(OSI模型中最重要的一层,TCP协议,UDP协议)

    ack数据(acknowledgement 确认):ACK为1表示确认号有效,为0表示报文中不包含确认信息,忽略确认号字段。表示响应。
    syn数据(synchronous建立联机):SYN表示建立连接
    FIN(finish结束):关闭连接
    PSH(push传送)表示有 DATA数据传输
    RST(reset重置)表示连接重置
    Sequence number(顺序号码)
    Acknowledge number(确认号码)

    *ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应

    建立连接时的三次握手即表示TCP连接时,客户端(以下用A表示)和服务端(以下用B表示)之间建立联系的三个过程:    
    First--> A向B发起连接请求,此时:A---->B;    
    Second--> B收到A的发送信号,并且向A发送确认消息,此时:B---->A;    Third--> A收到B的确认信号,并向B发送确认信号,此时:A---->B。    
    分析:通过第一次握手,B知道A发起了连接请求;
               第二次握手,A知道B此时能发送数据;
               第三次握手,B知道A能够接收数据。至此,A与B的连接建立完成。

    原理分析

    第一次握手:建立连接时,客户端发送syn包(syn=j)至服务器,并进入SYN_SENT状态,等待服务器确认。          
    SYN(Synchronize Sequence Numbers):同步序列编号。    
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。    
    第三次握手:客户端收到服务器·的SYN+ACK包,向服务器发送确认包ACK(ack+1),此确认包发送完毕后,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

    TCP断开连接时的四次挥手
    <1> A向B发起请求,表示A没有数据要发送了:A——>B;    
    <2> B向A发送信号,确认A的断开请求:B——>A;    
    <3> B向A发送信号,请求断开连接,表示B没有数据要发送了:B——>A;    <4> A向B发送确认信号,同意断开:A——>B。

    原理分析

    第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。    |
    第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。    
    第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。    
    第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。

    传输层需要两种不同的运输协议,即面向连接的TCP无连接的UDP。TCP数据单元为 而UDP中数据单元为数据报。传输层将数据切割之后,对每一个数据片安排一个序列号。以便数据到达接收方的传输层时,能以正确的顺序重组。

    UDP:

    目的:
    UDP的首部长度是固定的,共64bit,即8个字节。 提供了差错检测得功能,即用于确定当UDP报文段从源到达目的时,其中的比特是否发生了改变。
    UDP是无连接 尽最大努力交付 面向报文 首部开销小 8字节 比TCP的20个字节小

    5.会话层(这一层,封装过后的信息已经可以发送到接收方)

    会话单位的控制层,其主要功能是按照在应用进程之间约定的原则,按照正确的顺序收、发数据,进行各种形态的对话。建立一个自动收发包,自动寻址的功能。

    6.表示层

    数据表示形式的控制层,其主要功能是把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示。解决不同系统之间通信的语法问题(比如windows和linux)

    7.应用层:(HTTP协议)

    目的:这一层上发送方已经知道自己发送的是什么,以及转换成字节长度有多长,此时需要让接收方知道相关信息。
    流程:规定发送方和接收方必须使用固定长度的消息头。消息头必须使用某种固定的组成。而且消息头里必须记录消息体的长度等一系列信息。方便接收方能够解析发送方发送的数据。

    二.几个端口

    80是http协议的默认端口,是在输入网站的时候其实浏览器(非IE)已经帮你输入协议了,所以你输入http://baidu.com,其实是访问http://baidu.com:80。而8080,一般用与webcahe,完全不一样的两个,比如linux服务器里apache默认跑80端口,而apache-tomcat默认跑8080端口,其实端口没有实际意义只是一个接口,主要是看服务的监听端口。

    相关文章

      网友评论

          本文标题:TCP、UDP和端口

          本文链接:https://www.haomeiwen.com/subject/rzikwctx.html