zoukankan      html  css  js  c++  java
  • 计算机网络自学之路-----传输层

    传输层简介

    TCP三次握手

    TCP四次挥手

    为啥是三次握手,而是四次挥手呢?


    传输层简介                                                                                                                                                

    1)引入传输层的原因:

    • 消除网络的不可靠性(虽然IP协议之外又加了ICMP等协议来弥补IP的不可靠性,但还是远远不够的)
    • 向上层(应用层)屏蔽通信子网的实现细节
    • 弥补上层(应用层)提出的要求与下层(网络层等)提供的服务的差异

    2)传输层的功能:

    • 传输层提供了进程级的访问能力,实际上两个主机之间的通信就是两个进程之间的通信,这种通信也叫端到端(end-to-end)的通信
    • 实现分用与复用。不同端口之间的应用(像Http是80,Telnet是23等),通过复用网络层的一条连接来进行多种进程的数据传输。
    • 流量控制与缓冲管理。当接收端与发送端的速度不匹配的时候,就会采用缓冲机制。如下图管理方式

           2013-11-23_203855

    动态分配缓冲区

    ACK +序号 表示,在序号之前的所有报文都已收到。

    BUF + 数字。现在可用多个个buf。

    image

    上层的主机A与主机B这就代表应用层的实体,底层就是使用的网络层,中间层就是运输层。运输层与应用层之间的接口就是端口号,通过运输实体,来进行两个主机之间的通信。TSAP是传输层服务访问点的意思。NSAP就是网络层的服务访问点,网络层与运输层之间的接口应该就是IP地址~

    3)常用端口号

    应用层协议

    网络应用

    常用端口号

    SMTP

    电子邮件发送

    25

    POP

    电子邮件接收

    110

    FTP

    远程文件传输

    20,21.(serv_u:2121)

    Telnet

    虚终端

    23

    HTTP

    Web服务

    80(自定义的8080)

    DNS

    域名解析

    53

    SNMP

    网络管理

    161,162

    比如说远方的客户要服务程序的TSAP用什么办法呢?

    1. 预先约定,广为人知,像上面表格中的~
    2. 从名字服务器(name server)或目录服务器(directory server)获得TSAP

    TCP三次握手                                                                                                                                       

    非常经典的三次握手:

    三次握手

    访问www.google.cn,通过wireshark抓包得到:

    2013-11-24_100429

    从图可知,前三次是TCP握手建立连接,第四次才是HTTP协议。这也可以说明,HTTP是使用TCP可靠传输方式的。

    结合上面两张图,分析下这三次握手:

    1、从客户端192.168.0.105向服务端203.208.46.176发出一个建立连接的请求。标志位是:SYN,和一个发送序列号seq=0。这个SYN我理解为当接收方看到SYN的时候,就知道我是来建立连接的;这时,客户端进入等待确定状态。

    2、此时服务端收到客户端的SYN;然后,服务端203.208.16.176向客户192.168.0.105返回一个建立连接的确认信息。标志位有SYN和ACK。这里ACK我理解为,我已经收到你的请求了,现在来确定一下是不是你想建立请求,所以对第一步的seq=0进行加一处理,返回确定号ack=seq+1=0+1=1;这里的就好像对客户端说,已知道你想建立请求,且可以建立。服务端也会产生一个发送序列号seq=0;此时服务端进入SYN_RECV阶段。

    3、此时的客户端收到服务端发来的SYN+ACK后。然后客户端192.168.0.105向服务端203.208.46.176再进一步的确定。标志位ACK。确认号ack=seq+1=0+1=1;发送序列seq=1;

    通过以上三步就可以确定连接已经建立起来了,然后就进行下一步的传输。


    TCP四次挥手                                                                                                                                            

     

    2013-11-24_104534

    1、203.208.46.176向192.168.0.105发送断开信号。标志位:FIN,ACK;序号seq=45683;意思是,给192.168.0.105说数据传完了,我要关闭连接(此时只是不发送数据,但可接收

    2、192.168.0.105回应203.208.46.17。标志位:ACK;确定号ack=seq+1=45683+1=45684;序号seq=2031;意思是:给203.208.46.17说,好的,我知道了(你的数据发完了,但我可能还有数据没发给你

    3、192.168.0.105又回应203.208.46.17。标志位:FIN,ACK。意思是:同时也告知203.208.46.17我也关闭了

    4、203.208.46.176向192.168.0.105。原定情况下,标志位应该是ACK,确定关闭信息。但这里出现的是RST,表示连接重置。不太懂~~


    为啥是三次握手,而是四次挥手呢?                                                                                                            

    因为在挥手的过程中,比如说,服务端要断开连接,说明服务端的数据发送完了。这不代表客户端数据发完。这时的服务端不发送数据,但是可以接收数据,是半关闭状态。等到客户端发送FIN时,才代表客户端这边数据也发送完了,这时才可以正式的断开连接。



  • 相关阅读:
    原生JS实现无缝轮播
    原生JS模拟百度搜索框
    2016年终总结:一份来自跨界喜剧人的告白
    PHP学习笔记
    html5吹牛扯淡篇,闲话内容。
    html5+css3+jquery完成响应式布局
    jquery的animate({})动画整理
    函数的使用和选择
    jquery函数理解与运用
    老生长谈的$.extend()方法
  • 原文地址:https://www.cnblogs.com/banluchujia/p/3439852.html
Copyright © 2011-2022 走看看