美文网首页
第二章-用电信号传输TCP/IP数据-探索协议栈和网卡

第二章-用电信号传输TCP/IP数据-探索协议栈和网卡

作者: 陈_振 | 来源:发表于2018-04-19 06:15 被阅读0次

TCP/IP采用分层结构,上层委托下层:


第二章-用电信号传输TCP/IP数据-探索协议栈和网卡

浏览器邮件等一般应用程序收发数据时使用TCP,DNS查询等收发较短的控制数据时使用UDP。

协议栈的下半部分是IP协议,IP协议控制网络包收发操作的部分,在互联网上传输数据时,数据会被切分成一个个的网络包,而将网络包发送给通信对象的操作就是由IP来完成。IP中还包括ICMP协议和ARP协议,ICMP:用于告知网络包传送过程中产生的错误以及各种控制信息,ARP用于根据IP地址查询相应的以太网MAC地址。

套接字的实体就是通信控制信息

协议栈在执行操作时会参阅这些控制信息。协议栈是根据套接字中记录的控制信息来工作的。


第二章-用电信号传输TCP/IP数据-探索协议栈和网卡

调用Socket时的操作

  1. 申请创建套接字。
  2. 协议栈会分配用于存放套接字的所需的内存空间。


    第二章-用电信号传输TCP/IP数据-探索协议栈和网卡
创建套接字时,首先分配一个套接字所需的内存空间,然后向其写入初始状态。

连接服务器

套接字刚创建完成的时候,里面并没有存放任何数据,也不知道到通信对象是谁。

因此,我们需要把服务器的IP地址和端口号等信息告知协议栈,这是连接的操作目的之一

服务器不知道要跟谁通信,因此需要让客户端向服务器告知必要的信息。

因此,客户端向服务器传达开始通信的请求,也是连接操作的目的目的之一

连接实际上是通信双方交换控制信息。当执行数据收发操作时,还需要一块用来临时存储要收发的数据的内存空间,这块内存空间称为缓冲区。

第二章-用电信号传输TCP/IP数据-探索协议栈和网卡
应用程序传递来的信息以及从通信对象接收到的信息都会保存在套接字中
第二章-用电信号传输TCP/IP数据-探索协议栈和网卡

通信操作中使用的控制信息分为两类:

头部中记录的信息(如:TCP头部)
套接字中记录的信息 (如:IP地址和端口号)

连接操作的实际过程

这个过程是从App调用Socket库的connect开始。

connect (<描述符>,<服务器IP地址和端口号>)

接下来,这些信息传递给协议栈中的TCP模块,然后,TCP模块会与该服务器的TCP模块交换控制信息:

  1. 客户端创建一个包含开始数据收发操作的控制信息的头部。头部包含很多字段,这里重点关注发送方和接收方的端口号,然后将SYN比特设置为1。此外还需设置适当的序号和窗口大小。
  2. 当TCP头部创建好之后,接下来TCP模块会将信息传递给IP模块并委托它发送。
  3. 服务器的IP模块接收到后,将数据传递给TCP模块。服务器的TCP模块根据TCP的头部信息找到端口号对应的套接字,找到之后,在套接字中写入相应信息,并将状态改为正在连接。
  4. 上述操作完成后,服务器会返回响应。整个过程和客户端一样(发送方和接收方的端口号,然后将SYN比特设置为1),除此之外,还需将ACK标志位设置为1,表示已接收到网络包。(如果因为某些原因服务器不接受连接,那么将不设置SYN,而是将RST设置为1)
  5. 然后网络包返回到客户端,如果SYN为1,表示连接成功,这时会向套接字中写入服务器的IP地址和端口号等信息,同时将状态设为连接完毕。
  6. 到这里客户端的操作已经完成。(其实还剩下最后一个步骤,客户端将ACK设为1并发回给服务器,告诉服务器刚才的响应包已收到)。当服务器收到这个返回包时,连接操作才算全部完成。

建立连接之后,协议栈的连接操作就结束了,也就是说connect操作执行完毕,控制流程交给App

相关文章

网友评论

      本文标题:第二章-用电信号传输TCP/IP数据-探索协议栈和网卡

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