xiaohanliang
Network
Network
  • hi
  • LOWER
    • 0. arp决定下一跳
    • 1. dns决定终点
    • 2. [WIP]dns是不是真的有这些层级
  • MIDDLE
    • 0. 如何理解tcp握手的设计
    • 1. 诡异的tcp拆包现象
    • 2. tcp是一种高效的协议吗
    • 3. 为什么说没有人可以裸用tcp
    • 4. 尝试理解tcp的设计
    • 5. 连接建立@tcp调优
    • 6. 连接断开@tcp调优
    • 7. [WIP]拥塞控制@tcp调优
    • 8. 不需要这些花里胡哨的东西
    • 9. 怎么又是socket又是tcp
  • UPPER
    • 0. 为什么大家都用http
    • 1. [WIP]为什么http也keep-alive
    • 2. 如何保证pipeline的顺序到达
    • 3. 如何保证http的安全性
    • 4. 只不过https基于tls连接
    • 5. 怎么理解get/post
    • 6. http2为什么更快
    • 7. [WIP]内置加速的http3
    • 8. 怎样制造出实时效果-ws
    • 9. kcp是如何榨干你的带宽的
  • DEVICES
    • [302] 跳转到Linux网络设备
  • KUBERNETES NETWORK
    • [302] 跳转到容器网络
Powered by GitBook
On this page
  • 那么什么叫socket
  • 端口

Was this helpful?

  1. MIDDLE

9. 怎么又是socket又是tcp

那么什么叫socket

有时候我们说搞socket编程, socket编程就是tcp的编程吗? tcp/udp是一种协议, 一种约定"我们俩怎么沟通"的约定, 一旦决定好怎么去沟通, 于是开始通信吧, 用的就是socket开始沟通

比如在Linux系统中socket是一种文件, 你可以打开/关闭一个socket, 也可以对socket进行读写. socket读/写的工作方式就是你选择的(tcp/udp). 正常来说"搞"socket分成以下几步:

  • 服务端监听:

    • 首先你要绑定(bind)这个端口: net.Liten/ListenPacket

    • 然后你接受(Accept)来访的链接: conn = listener.Accept

    • 然后你读取tcp字节流里的内容: io.Read

    • 然后把响应写到连接里去: io.Write

  • 客户端请求: 先net.Dial, 然后直接io.Write

端口

无论是tcp还是udp都是需要端口号才能工作的, 理论上你有65535个端口用, 但实际上0~1023被用作一些固定用途, 比如ssh, http等, 如果你尝试监听这些端口除非sudo否则不让你这么做. 而1024~49151就给服务端绑定, 剩下来49152到65535一般用于临时端口, 也就是客户端向服务端发起请求的时候用的

Previous8. 不需要这些花里胡哨的东西Next0. 为什么大家都用http

Last updated 4 years ago

Was this helpful?