计算机网络精炼笔记(二)应用层——Socket

计算机网络精炼笔记(二)应用层——Socket

文章目录

  • 计算机网络精炼笔记(二)应用层——Socket
    • 概述
    • 一、TCP套接字编程
      • 大致过程
      • 两个结构体
      • 编程过程
      • 大写转小写的过程,Socket编程实现
      • 代码(和上文的过程对应)
    • 二、UDP编程
      • 特点
      • 大体过程
      • 大体编程实现
  • 参考

概述

计算机网络精炼笔记(二)应用层——Socket_第1张图片
TCP Socket 是一个整数,代表的是一个会话关系,对应一个进程(PID)
UDP Socket 是一个整数,代表本地的IP和端口

如果是多进程,可以有很多connection socket, 但只有一个welcome socket

一、TCP套接字编程

大致过程

1.服务器进程必须运行,创建一个欢迎socket,该socket和本地的端口进行捆绑,在欢迎socket上阻塞式的等待接收客户端的连接
计算机网络精炼笔记(二)应用层——Socket_第2张图片

2.客户端创建本地的套接字,隐式捆绑到本地的端口,再指定服务器的ip和端口进行连接。
计算机网络精炼笔记(二)应用层——Socket_第3张图片

3.服务器接受来自用户端的请求 ,解除阻塞式等待,返回一个 新的socket(与欢迎socket不 一样),与客户端通信
计算机网络精炼笔记(二)应用层——Socket_第4张图片

4.连接API调用有效时,客户端与服务器建立了TCP连接,即可以通信了
计算机网络精炼笔记(二)应用层——Socket_第5张图片

两个结构体

Socket_addr_in(Sad)
计算机网络精炼笔记(二)应用层——Socket_第6张图片

作用:IP地址和port捆绑关系的数据结构(进程的端节点)

  • sin_family :不仅可以用于TCP/IP通信,还可以用于其他通信(IPX),因此需要标识
  • sin_port : 端口号
  • sin_addr : IP地址(32位) (从hsoet_id 的 addr_list 中复制过来)
  • sin_zero[8] : 对齐作用

host_ent
计算机网络精炼笔记(二)应用层——Socket_第7张图片

作用:作为调用域名解析函数时的参数

  • h_name 主机的域名
  • h_aliases 主机的一系列的别名
  • h_length 地址的长度
  • h_addr_list 可能对应的不同IP地址的列表

编程过程

大写转小写的过程,Socket编程实现

server端:
1、weclome = Socket()
2、bind(welcome, Sad)
3、ConSock = accept(weclome) 阻塞状态

Client 端:
4、ClientSock = socket()
5、操作系统隐式的找一个没有用的port进行bind:bind(ClientSock, Cad)
6、Connect(ClientSocket, Sad)阻塞状态

Server端:
7、生成ConSock, 解除阻塞,记录Socket, 源&目的IP 五个值

Client端:
8、connect()解除阻塞,write(ClientSock, data)

Server端
9、Read()
10、Write()

Client端:
11、read()

Server端
12、close()关闭连接(删除表格中的记录ConSock),返回状态3
如此循环

代码(和上文的过程对应)

计算机网络精炼笔记(二)应用层——Socket_第8张图片
计算机网络精炼笔记(二)应用层——Socket_第9张图片

计算机网络精炼笔记(二)应用层——Socket_第10张图片
计算机网络精炼笔记(二)应用层——Socket_第11张图片

二、UDP编程

特点

  • UDP传送的也是数据报datagram,和IP传送的数据报名字一样,但含义不同
  • 在客户端和服务器之间没有连接,没有握手
  • 发送端在每一个报文中明确地指定目标的IP地址和端口号
  • 服务器必须从收到的分组中提取出发送端的IP地址和端口号
  • 传送的数据可能乱序,也可能丢失

大体过程

1.服务器创建一个udp的socket,绑定端口8080用于监听数据包,通过调用receive方法阻塞的监听。
计算机网络精炼笔记(二)应用层——Socket_第12张图片
2.客户端创建一个自己的socket,该socket的端口假设操作系统分配的是4567

计算机网络精炼笔记(二)应用层——Socket_第13张图片
3.客户端发送数据包、目标ip和目标端口给下层的传输层,传输层就能够得到源ip、源端口、目的ip和目的端口,然后一步一步的打包交给下层,发送到服务器主机,服务器主机通过数据包的目的ip和目的端口,对比发现socket对应,然后把数据发送给对应的pid号为100的应用进程。

4.服务器解除阻塞,收取数据。

5.最后关闭连接,删除对应的socket

大体编程实现

计算机网络精炼笔记(二)应用层——Socket_第14张图片

参考

tcp套接字编程,大小写转换
https://www.bilibili.com/video/BV1JV411t7ow?p=20

https://blog.csdn.net/weixin_45902285/article/details/122814167

你可能感兴趣的:(计算机网络,http,udp,tcp/ip,网络协议)