三次握手 四次挥手 套接字

1946 冯诺.依曼

网络的目的:数据的传输

iso(国际标准化组织)

osi七层模型 网络通信的标准化流程

应用层-表示层-会话层-传输层-网络层-链路层-物理层

工作模式  模式  每一层大概做什么的

应用层:提供用户服务,具体的内容由特定的程序规定,纯面向用户,手机上的软件是应用层qq wechat (提供交流的工具)

表示层:提供数据的加密和压缩优化(hello world - 加密 hello world)

会话层:确定建立应用连接,选择传输服务(确定对方是否有软件并开启)

传输层:提供数据传输服务,进行流量控制(根据应用层选择合适的传输服务)

网络层:路由选择,网络互联(从一台电脑发送消息对方怎样接受 ip)

链路层:提供链路交换,具体消息的发送(转化成高低电平信号,转换成可以向物理层传输的信号)

物理层:物理硬件,接口,网卡的规定

应表会传网链物

 

7层逐渐演变为5层模型(tcp/ip模型)

4层模型:应用层 传输层 网络层 物理链路层

5层模型:应用层 传输层 网络层 链路层 物理层

 

osi模型优点:将功能分开,降低网络传输中的耦合度。使开发流程更加清晰,每部分各司其职。

 

高内聚低耦合

高内聚:每个模块功能尽量单一,不会多个功能掺杂(便于调用)

低耦合:尽量降低每个模块的关联性

接口化开发

 

要求:能够顺序说出七层模型 五层模型 知道每一层干什么事情,理解消息传输流程

 

网络协议:在网络通信中各方必须遵守的规定  如建立什么连接,消息结构如何解析

协议:指导每一层该怎么干 干什么

实际编程就是按照协议去做

应用层:TFTP HTTP  DNS  SMTP

传输层:TCP  UDP

网络层:IP

物理层:IEEE

 

网络相关概念

网络主机:在网络上确定一台主机(可以在网络上进行传输)

本地使用:'localhost'  127.0.0.1     只能在当前计算机上操作

网络地址:'0.0.0.0'  '172.60.50.54'(本地网络IP)

 

ipython3   进入交互模式

import socket

socket.gethostname()  获取本机的计算机名

socket.gethostbyname('tedu')  获取本机的IP   以127开头的都是本地ip

 

 

IP地址:网络上确定一台主句的地址

IPv4:点分十进制 比如192.168.1.3  0--255  32位

IPv6:128位

供应商提供的IP  公网

 

网络连接测试

ping 172.60.50.180

 

特殊IP

127.0.0.1  本地测试IP

0.0.0.0     自动使用本地可用网卡IP

192.168.1.0  代表当前网段 192.168.1当前网段 0代表具体哪一台机子

192.168.1.1   通常为网关地址

192.168.1.255  广播地址

 

 

socket.gethostbyaddr('localhost')

('localhost', [], ['127.0.0.1'])

第一个:访问的主机

第二个:访问的主机的别名

第三个:访问的主机IP地址

 

socket.inet_aton('192.168.1.2')

b'\xc0\xa8\x01\x02'

 

socket.inet_ntoa(b'\xc0\xa8\x01\x02'')

'192.168.1.2'

 

域名:网络服务器的地址在网络上的名称(也可以通过IP访问)

访问网站实际是访问主机的IP

DNS 把输入的网站(www.baidu.com)解析为IP

端口号:端口号是地址的一部分,在一个系统中每个网络应用监听不同的端口,以获取对应端口传递的信息  区分主机中的应用

取值范围:1-65535

1-255   一些通用端口(众所周知的程序占用)

256-1023  系统端口

1024-65535  自用端口  >10000

 

如何获取应用程序的端口

socket.getservbyname('mysql')

3306

 

 

传输层服务:面向连接的传输服务,面向无连接的传输服务

 

面向连接的传输服务:tcp协议

传输特征:提供可靠的数据传输

可靠性:数据在传输中,无失序 无差错 无丢失 无重复

       内容不会出现偏差

       内容不会重复传输

为保证可靠性:在数据传输前和传输结束后需要建立连接和断开连接

 

建立连接(三次握手):在面向连接的传输服务中建立连接的过程

1.客户端向服务端发送连接请求

2.服务器接受到请求进行确认,返回确认报文

3.客户端收到服务器回复最终确认连接

 

断开连接(四次挥手):在面向连接的传输服务中断开连接的过程

1.主动方发送报文,告知被动方要断开连接

2.被动方发回复报文,表示已经接收到请求,准备断开

3.被动方再次发送报文,表示准备处理就绪,可以断开

4.主动方发送确认报文,断开连接

应用情况:适用于传输较大的内容或文件,网络良好,需要保证传输可靠性的情况

eg: 聊天信息  文件的上传下载  邮件处理  网页获取

 

 

无连接的传输服务(udp协议)

传输特点:

         不保证传输的可靠性

         没有连接和断开的过程

         数据的首发比较自由

应用情况:网络情况肯能产生丢包,对传输可靠性要求低

eg:网络视频  群聊  广播

 

 

要求:

    1.要理解三次握手和四次挥手,能够描述过程

    2.知道tcp和udp传输的区别

 

 

socket套接字编程 

目的:通过编程语言提供的套接字编程接口,可以更简单的完成基于tcp和udp的编程

套接字:完成上述目标的一种编程手段

套接字种类:

           流式套接字(sock_stream):传输层基于tcp的协议通信

面向连接的可靠传输  tcp传输 

字  这三者应绑定在一起记忆

          数据报套接字(sock_dgram):传输层基于udp协议传输

面向无连接的不可靠传输  udp传输  数据报套接字  这三者应绑定在一起记忆

底层套接字(sock_ram):访问底层协议套接字           

 

#系统分层:纯硬件  汇编语言  系统层  驱动开发  应用层开发

 

 

tcp的服务端编程

sockfd=socket.socket()(sock_family=af_inet,sock_type=sock_stream,proto=0)

函数的分析:功能 参数 返回值

功能:创建套接字对象

参数:sock_family=af_inet,sock_type=sock_stream,proto=0

返回值:返回套接字对象

af_inet(地址族,确定网络通信方式)  ipv4的类型(最常用)

sock_type(套接字类型)  sock_stream  sock_dgram

proto 通常为0(表示选定子协议类型)(应用层没有子协议)

 

绑定地址

sockfd.bind(addr)

功能:绑定地址

参数:addr=元组(ip,port)  ('192.168.1.2',3306) 一定是一个二元元组

设置监听套接字

sockfd.listen(n)

功能:将套接字设置为监听套接字,创建监听队列(相当于设置器属性,方便连接客户端)

参数:监听队列大小,n为整数

*一个监听套接字可以连接多个客户端

 

等待客户端连接

connfd,addr=sockfd.accept()  每一个客户端进来都会创建一个新的套接字

功能:阻塞等待处理客户端连接

返回值:

      connfd(新的套接字,用于和客户端通信)

      addr(连接的客户端的地址)(ip,port)

*阻塞函数:当程序运行到阻塞函数位置,如果某种条件没有达成则暂停程序运行,知道条件达成结束阻塞  eg:input  sleep

 

消息的收发

 

data=connfd.recv(buddersize)

功能:接受消息

参数:一次接受消息的大小 字节

返回值:返回接受到的内容

 

n=confd.send(data)

功能:发送消息

参数:要发送的内容(bytes格式)

返回值:返回实际发送的字节数

 

关闭套接字

sockfd.close()  防止误操作  节省空间

 

 

telnet 127.0.0.1 8888

 

0.0.0.0

127.0.0.1

172.

 

 

客服端(需保持与服务端相同的套接字类型)

1.创建套接字(和服务端套接字类型相同)

2.发起连接

connect(addr)

功能:向服务端发起连接

参数:服务端地址(元组)

3.消息收发(一边收一边发,不能都收)

4.关闭套接字

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值