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

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

概述

在这里插入图片描述
TCP Socket 是一个整数,代表的是一个会话关系,对应一个进程(PID)
UDP Socket 是一个整数,代表本地的IP和端口

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

一、TCP套接字编程

大致过程

1.服务器进程必须运行,创建一个欢迎socket,该socket和本地的端口进行捆绑,在欢迎socket上阻塞式的等待接收客户端的连接
在这里插入图片描述

2.客户端创建本地的套接字,隐式捆绑到本地的端口,再指定服务器的ip和端口进行连接。
在这里插入图片描述

3.服务器接受来自用户端的请求 ,解除阻塞式等待,返回一个 新的socket(与欢迎socket不 一样),与客户端通信
在这里插入图片描述

4.连接API调用有效时,客户端与服务器建立了TCP连接,即可以通信了
在这里插入图片描述

两个结构体

Socket_addr_in(Sad)
在这里插入图片描述

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

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

host_ent
在这里插入图片描述

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

  • 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
如此循环

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、UDP编程

特点

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

大体过程

1.服务器创建一个udp的socket,绑定端口8080用于监听数据包,通过调用receive方法阻塞的监听。
在这里插入图片描述
2.客户端创建一个自己的socket,该socket的端口假设操作系统分配的是4567

在这里插入图片描述
3.客户端发送数据包、目标ip和目标端口给下层的传输层,传输层就能够得到源ip、源端口、目的ip和目的端口,然后一步一步的打包交给下层,发送到服务器主机,服务器主机通过数据包的目的ip和目的端口,对比发现socket对应,然后把数据发送给对应的pid号为100的应用进程。

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

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

大体编程实现

在这里插入图片描述

参考

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值