架构
1.应用层(应用间的通信协议)
主要代表:HTTP协议
2.运输层(找到该电脑的端口)
主要代表:TCP协议`
3.网络层(找到指定IP的电脑)
主要代表:IP协议`
4. 数据链路层
5. 物理层
理解过程
1. 协议与服务
这是一对相对的概念
协议:两个客户端(服务端/电脑) 同一层结构(应用层-应用,运输-运输..)的通信规则
服务:统一个服务端,下一层为上一层提供的接口(服务)
2. 服务过程
QQ发信息:A发“haha”给 B
1. 应用层:带着“haha”信息数据,通过协议打包好,将数据提交给下一层
2. 传输层:
a. 提前与B建立连接(为了确保信息完整安全,想象提前建一个隧道)
b. 接受上一层提供的数据,通过协议打包
c. 将数据提交给下一层
3. 网络层:继续封装数据,然后提交给下一层(此时数据已包括目标ip和端口)
4. 链路层:把数据切成一小块一小块
5. 物理层:把上面的数据转出0和1
01001 ,历经无数个路由,到达指定客户端B
在B:
1. 物理层、链路层:把数据拼接还原完整,把数据往上一层传
2. 网络层:在一路上通过无数路由找到目标主机,把数据往上一层传
3. 传输层:确定端口,把数据网上一层传
4. 应用层:接受服务端口的数据->翻译->B看到了“haha”
Python创建连接(套接字)
Socket 是对 TCP/IP 协议的封装
目的:
建立连接,为上一层(应用层),提供一条信息传输的“隧道”
服务器端:
1. 初始化服务
初始化socket服务(对象)
s = socket.socket()
2. 绑定服务到指定端口
socket服务中,ip和端口总是(以元祖的形式)成对出现,ip默认本地
s.bind( ('ip',端口) )
3. 监听端口
n:指定可以“接待”的客户数量
s.listen(n)
4. 接待来宾,建立连接
conn,addr = s.accept() --> 返回一个元祖,包括两个元素
若无客户端接入会一直等待···
理解:配送接待员,是配送、配送、配送,这是一个行为
元素一:socket对象
为服务器的端口分配一个“接待员”(线程),接待客户
元素二:元组('ip',端口)
5. 数据传输
线程.send(b'...') / conn.send(b'...')
b'' :这样的数据不会发送
线程.recv(n) / conn.recv(n) n:要接受的字节数
若接受不到数据,会一直等待···
当收到 b'' 数据时,说明客户端断开
6. 关闭连接
线程.close() / conn.close() :关闭该线程的(连接)服务
s.close() :关闭该端口的服务,取消占用端口
程序结束会关闭端口服务
客户端:
1. 初始化服务(同上)
2. 连接到目标服务器的特定端口
s.connect(('ip',端口))
连接到服务器
一个connect,对应一个线程(conn)
3. 数据传输(同上)
4. 关闭连接(同上)
参考资料
<计算机网络>
计算机端口详解
http://blog.csdn.net/freeking101/article/details/70174350
HTTP和Socket的区别
https://www.cnblogs.com/meier1205/p/5971313.html
网友评论