美文网首页
网络7层模型和TCP、UDP

网络7层模型和TCP、UDP

作者: 瓢鳍小虾虎 | 来源:发表于2021-01-01 10:42 被阅读0次

    (高三层)
    应用层:为应用进程提供网络服务。
    表示层:数据格式转换、加密、压缩等。
    会话层:建立、管理、终止应用进程之间的会话和数据交换。

    传输层:TCP、UDP

    (低三层)
    网络层:网络路由选择、流量控制。(IP)
    链路层:校验、确认、反馈、重发等机制保障数据传输稳定。
    物理层:原始比特流的传输介质。(010101)

    高三层通常我们也会看作一个应用层,高三层的功能通常被应用服务器实现,例如tomcat、nginx等

    传输层主要定义了传输的协议,如TCP或者UDP,我们做应用开发基本也是只关注到这一层。

    TCP三次握手

    三次握手的本质含义并不是打通网络关系,(网络关系本来就是通的)
    是让客户端和服务端互相确认一下网络是否有问题,是否可以互相收发数据的过程。

    TCP是一种传输协议,具体通过数据报文的格式和参数规定。TCP报文中有几个标志位需要了解一下:
    ACK:请求连接的序号
    SYN:建立连接
    FIN:关闭连接

    过程:
    1)客户端 发起请求,等待确认:
    SYN_SEND: SYN=1,seq=x
    2)服务端 收到请求,响应信息,等待确认:
    SYN_RECV: SYN=1, ACK=1, seq=y, ack_seq=x+1
    3)客户端 收到请求,响应信息,通知服务端,建立连接:
    ESTABLISHED: ACK=1, seq=x+1, ack_seq=y+1
    4)服务端 建立连接
    ESTABLISHED

    TCP四次挥手

    1)客户端 发起请求 等待确认:
    FIN_WAIT_1: FIN=1, seq=u
    2)服务端 收到请求,响应信息,处理善后(半关闭):
    CLOSE_WAIT: ACK=1,seq=v, ack_seq=u+1
    3)客户端 收到请求,等待关闭:
    FIN_WAIT_2
    4)服务端 发起请求,通知可以关闭,等待确认:
    LAST_ACK: FIN=1, ACK=1, seq=w, ack_seq=u+1
    5)客户端 收到请求,响应信息,等一会就关闭
    TIME_WAIT: ACK=1, seq=u+1, ack_seq=w+1
    6)服务端 关闭
    CLOSE
    7)客户端 关闭
    CLOSE

    如果很难理解那换个场景,一对热恋男女说晚安的故事:
    男(客户端):不早了你赶紧睡吧。
    女(服务端):好的我去洗漱然后就睡。
    男(客户端)傻傻的等。
    女(服务端):我要睡了,你也赶紧睡吧。
    男(客户端):嗯,你先睡,我稍后就睡。
    女(服务端)安静的睡着了。
    男(客户端):呼呼的睡着了。

    UDP

    UDP的报文比TCP简单,首部开销小。
    UDP无需建立连接,也没有连接状态,只要知道目标端口就可以发送,至于收没收到不关心...
    和TCP相比UDP更快,资源占用更小,但是不可靠。
    UDP适合对数据可靠性要求不高的场景或者实时场景,比如直播,视频,音频,及时更新数据。

    Socket
    通常我们网络编程都是用的Socket的api,Socket有面向tcp的或者udp的,也有直接面向网络层的接口。

    相关文章

      网友评论

          本文标题:网络7层模型和TCP、UDP

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