网络编程的四层协议

网络编程 四层协议

应用层协议
与网络相关的程序,通过网络与其他程序通信,使用的数据格式规范。比如浏览器向服务器发请求获取网页数据,
此时发送的请求报文(皇室信件)就需要遵循HTTP协议(按HTTP协议的要求填写字段)。常见的应用层协议有:

- HTTP(80端口),主要用于普通浏览。
- HTTPS(443端口),HTTP协议的安全版本。
- FTP(2021端口),用于文件传输。
- POP3(110端口),收邮件用。
- SMTP(25端口),用来发送电子邮件。
- SSH(22端口),用于加密安全登陆用。
- DHCP(67端口,动态主机配置协议),动态配置IP地址。
- DNS,用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。
- SNMP,用于网络信息的收集和网络管理。
- ARP,用于动态解析以太网硬件的地址。

传输层协议
解决诸如端到端可靠性(数据是否已经到达目的地)和保证数据按照正确的顺序到达这样的问题。TCP、UDP都是传输层协议。

网络层协议
解决在一个单一网络上传输数据包的问题。IP协议是网络层协议。

数据链路层协议
它是数据包从一个设备的网络层传输到另外一个设备的网络层遵循的规范。比如以太网协议、Wi-Fi协议。

IP
1,DNS
DNS服务器用于将域名的请求转换为IP地址。
2,查看电脑的IP地址
在windows系统下,ipconfig
在linux系统下, ifconfig
3,ping 用来查看电脑是否有网
ping www.baidu.com

端口号
端口号:   0--65535
知名端口号:  0--1023 
http的端口号: 80
动态端口号:  1024--65535
查看电脑的端口:  
    在windows系统下, netstat -ano
    在linux系统下, netstat -an
总结:IP地址用来确定是哪台电脑,而端口号用来确定是电脑的哪个应用

socket套接字
作用:用来实现不同电脑之间进程的通信
创建socket套接字

1,先导包  import socket
2,socket(address FAMily,type)
address FAMily 分为:AF_INET(实现网络之间进程的通信) AF_UNIX(一台电脑进程之间的通信)
type  分为 1,udp  SOCK_DGRAM  2,tcp  SOCK_STREAM
3,关闭套字   close

udp套接字与tcp套接字的区别
udp  套接字   不需要建立连接, 时效性较高, 多对一,一对一,一对多,多对多
tcp  套接字   需要建立连接, 更加安全,一对一

udp 通信流程

1,创建udp套接字
from socket import *
变量1 = socket(AF_INET,SOCK_DGRAM)

2,地址        ip地址
变量2 ="192.168.1.34",8080)
    绑定端口号   bind(("",新端口号))
    变量1.bind(("",8010))
    
3,内容        input(“内容”)
变量3 = input"请输入内容:".encode("gbk")

4,发送        sendto()
变量1.sendto(内容,地址)
变量1.sendto(变量3,变量2)

5,接收        变量4(接收内容),变量5(接收ip地址)= recvfrom(1024)
                print(变量4.decode("gbk"))
                print(变量5)
                
6,关闭        close()
变量1.close()

tcp
需要建立连接
tcp通讯流程

建立连接之前
三次握手  四次挥手
第一次握手  客户端向服务器发送连接请求
第二次握手  服务器向客户端发送确认请求 并等待连接
第三次握手   客户端服务器发送确认  开始建立连接
断开连接之前
四次挥手执行流程
第一次挥手  客户端给服务器发送断开请求
第二次挥手  服务器向客户端发送确认端口请求
第三次挥手  服务器端口
第四次挥手  客户端确认断开   断开连接

tcp客户端
1,创建套接字

from socket import *
变量 = socket(AF_INET,SOCK_STREAM)
2,地址
3,建立连接  connect(地址)
4,写内容   编码encode("gbk"5,发送   send(内容)
6,接收   变量= recv(10247,输出接收的数据    解码decode("gbk"8,关闭

tcp服务器

1,创建套接字
2,绑定ip地址、端口号
3,把套接字变为被动  listen()
4,等待连接  新的套接字,ip地址 = 套接字.accept()
5,接收数据  新的套接字.recv(1024.decode("gbk"6,发送数据  新套接字.send(input"输入发送内容".encode("gbk"))
7,关闭 客户端
    关闭 服务器
udp 和 tcp 区别 
1、tcp需要建立连接 安全系数高  所需要的资源多  只支持 一对一
2、udp不需要建立连接 时效性好  所需要的资源少  支持 一对一  一对多 多对一 多对多  

http协议 发布与1991年
超文本传输协议
初衷是用来传输 html协议
用的最多的版本是 1.1

浏览器向服务器请求数据的过程

1,输入网址
2,DNS服务器根据网址,找出相对应的 ip地址
3,通过ip地址找到 web服务器
4,web服务器从本地计算机中找到相对应的资源
5,将资源返回给浏览器
6,浏览器将数据解析出来, 返回网页中

GET 请求报文说明

---- 请求行 ----
GET / HTTP/1.1  # GET请求方式 请求资源路径 HTTP协议版本
---- 请求头 -----
Host: www.baidu.com  # 服务器的主机地址和端口号,默认是80
Connection: keep-alive # 和服务端保持长连接
Upgrade-Insecure-Requests: 1 # 让浏览器升级不安全请求,使用https请求
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36  # 用户代理,也就是客户端的名称
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 # 可接受的数据类型
Accept-Encoding: gzip, deflate # 可接受的压缩格式
Accept-Language: zh-CN,zh;q=0.9 #可接受的语言
Cookie: pgv_pvi=1246921728; # 登录用户的身份标识
---- 空行 ----)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值