TCP/IP体系五层大楼

2018-03-29  本文已影响0人  秋不舍燕桃
QQ截图20180329004122.png

架构

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

https://www.cnblogs.com/meier1205/p/5971313.html

上一篇 下一篇

猜你喜欢

热点阅读