Computer Networks & Socket Programming

2019/06/02 TCP/IP

网络知识的总结, Socket编程经验, update@20211014

TCP协议的特点

TCP提供可靠的交付服务, 保证传输的数据无差错(数据校验, 参考TCP新手误区–数据校验的意义),不丢失(确认和重传),不重复(序号), 有序(序号)

network device

  • 网闸(GAP): 物理上做到了两端不同时连接, 阅读
  • 网关(Gateway): 网络的出口地址, 实现不同网络之间的通信
  • 交换机(Switch): 工作在数据链路层, 识别MAC地址,实现网络内部的通信
  • 网桥(Bridge):是早期的两端口数据链路层网络设备
  • 路由器(Router):工作在网络层,是用于连接多个逻辑上分开的网络(相似网络)

    集线器、网桥、交换机、路由器、网关大解析

Socket, Server, Client通信建立(函数调用)过程

server

​ server端因为既需要处理已存在的连接,又需要处理可能存在的新连接请求,所以相对client来说较为复杂, 示例代码地址

  • 使用socket创建1个套接字sock
  • 使用bindsock绑定到某个地址上
  • 使用FD_SET将监听套接字sock加入已连接套接字集合active_fd_set
  • 使用select 侦测active_fd_set中是否收到数据请求
  • 使用FD_ISSET处理是已连接套接字active_fd_set中的, 使用套接字做下一步判断
    • 获取到的套接字不是监听套接字(已有连接):正常通信, read/write
    • 获取到的套接字是监听套接字(新连接):
      • 调用accept接收请求, 得到新的已连接套接字new
      • 将新的已连接套接字new加入已连接套接字集合active_fd_set

client

client端的处理比较简单,过程如下

  • 使用socket创建连接套接字sock
  • 使用connect向服务器发起连接请求, 连接成功后即可正常通信 read/write

ReadList

Search

    Categories Cloud

    Life Linux C/CPP Database Web Benchmarks Software Data Python TCP/IP Financial Stock Bug Golang Rust General Infrastructure TODO Movie Multitenancy Java Ant Algorithm Fastjson Death Build Deploy Education India Aamir Khan Society Female Learning Method OJ Interviewee Interviewer AVL Tree MyBatis Code Reading Design Diary Dating Heap Data Structure Summary Reading Love Claire Mcfall Ferryman Zodiac Astrology Chinese Calculator flink Dubbo docker redis

    Table of Contents