TCPIP网络编程知识点总结二

在我之前推荐的C++学习路线中,《TCPIP网络编程》这本书是学习C++网络编程的入门书籍,书中包含了linux和windows两个操作系统的网络编程,但我们更加常用的其实是在linux环境下。所以我整理了一些面试经常问到或者常见的代码结构体,供大家秋招复习使用。

TCP 服务器端的默认函数调用顺序

在这里插入图片描述

服务端进入等待连接请求状态

  #include <sys/socket.h>
  int listen(int sock, int backlog);
      --> 成功时返回0, 失败时返回-1。    
  // sock: 希望进入等待连接请求状态的套接字文件描述符,传递的描述符套接字参数成为服务器端套接字(监听套接字)。
  // backlog: 连接请求等待队列(Queue)的长度,若为5,则队列长度为5,表示最多使5个连接请求进入队列。

服务端受理客户连接请求

  #include <sys/socket.h>
  int accept(int sock, struct sockaddr * addr, socklen_t * addrlen);
      --> 成功时返回创建的套接字文件描述符,失败时返回-1。
  // sock: 服务器套接字的文件描述符
  // addr: 保存发起连接请求的客户端地址信息的变量地址值,调用函数后向传递来的地址变量参数填充客户端地址信息。
  // addrlen: 第二个参数addr结构体的长度,但是存有长度的变量地址。函数调用完成后,该变量即被填入客户端地址长度。

TCP 客户端的默认函数调用顺序

图片说明

客户端请求连接

#include <sys/socket.h>
int connect(int sock, struct sockaddr* servaddr, socklen_t addrlen);
    --> 成功时返回 0,失败时返回-1。
// sock: 客户端套接字文件描述符。
// servaddr: 保存目标服务器端地址信息的变量地址值。
// addrlen: 以字节为单元传递已传递给第二个结构体参数servaddr的地址变量长度。
    //客户端调用 connect函数后,发生以下情况之一会返回(返回函数调用)
      * 服务器端接收连接请求。
      * 发生断网等异常情况而中断连接请求。
//所谓的 “接收连接” 并不意味着服务器端调用 accept函数,其实是服务器端把连接请求信息记录到等待队列。因此connect函数返回后并不立即进行数据交换。

TCP服务端和客户端的函数调用关系

服务器端创建套接字后连续调用bind、listen函数进入等待状态,客户端通过调用connect函数发起连接请求。

客户端只有等到服务器端调用listen函数后才能调connect函数。

客户端调用connnect函数前,服务器端才有可能率先调用accept函数。此时服务器端在调用accept函数时进入阻塞(blocking)状态,直到客户端调用connect函数为止。

TCP套接字中的I/O缓冲

  • I/O缓冲在每个TCP套接字中单独存在

  • I/O缓冲在创建套接字时自动生成

  • 即使关闭套接字也会继续输出缓冲中遗留的数据

  • 关闭套接字将丢失输入缓冲中的数据

TCP中是否会因为缓冲溢出而丢失数据

TCP 会控制数据流。TCP 中有滑动窗口(Sliding Window)协议。

数据收发也是如此,因此 TCP中不会因为缓冲溢出而丢失数据。

三次握手

  1. 客户端的TCP向服务器端的TCP发送SYN报文段。这个报文段不包含应用层数据,报文段首部的SYN标志位被置为1。客户端会随机地选择一个初始序号,并将该序号放置于该起始的TCP SYN报文段的序号字段中。该报文段会被封装在一个IP数据报中,并发送给服务器。
  2. 服务器从该数据报中提取出TCPSYN报文段,为该TCP连接分配TCP缓存和变量,并向该客户TCP发送允许连接的报文段。首先将SYN比特置为1,其次,该TCP报文段首部的确认号字段被置为client_isn+1.最后服务器选择自己的初始序号,并将其放置到TCP报文段首部的序号字段中。该允许连接的报文段被称为SYNACK报文段。
  3. 收到SYNACK报文段后,客户也要为该连接分配缓存与变量。客户主机向服务器发送另外一个报文段,这个报文段对服务器允许连接的报文段进行确认。将值server_isn+1放置在TCP报文段首部的确认字段。

四次挥手

  1. 客户应用程序发出一个关闭连接命令。此时客户TCP向服务器进程发送一个特殊的TCP报文段。这个报文段首部的FIN标志位被置为1.
  2. 服务器接收到该报文段后,就向发送方回送了一个确认报文段。
  3. 服务器发送自己的终止报文段,其FIN被置为1.
  4. 该客户对这个服务器的终止报文进行确认。

后续我还在继续总结相关的实用知识点,大家敬请期待,如果我的文章对你有帮助,请帮忙留言转发点赞收藏哦。

#秋招##C++工程师##计算机网络知识点总结#
全部评论
滴滴滴
点赞 回复 分享
发布于 2022-08-26 18:55 北京

相关推荐

评论
7
25
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务