目录

  • 一、tcp协议与udp协议
  • 二、三次握手(建立连接)
  • 三、四次挥手(断连接)
  • 四、整体缩略图
  • 五、socket
  • 六、上网流程
    • 6.1、储备知识点
    • 6.2、网络通信实现
    • 6.3、上网流程

一、tcp协议与udp协议

TCP(Transmission Control Protocol)一种面向连接的、可靠的、传输层通信协议(比如:打电话)
优点:可靠,稳定,传输完整稳定,不限制数据大小
缺点:慢,效率低,占用系统资源高,一发一收都需要对方确认
应用:Web浏览器,电子邮件,文件传输,大量数据传输的场景UDP(User Datagram Protocol)一种无连接的,不可靠的传输层通信协议(比如:发短信)
优点:速度快,可以多人同时聊天,耗费资源少,不需要建立连接
缺点:不稳定,不能保证每次数据都能接收到
应用:IP电话,实时视频会议,聊天软件,少量数据传输的场景客户端和服务端在建立连接时: 三次握手
客户端和服务端在断开连接时: 四次挥手
SYN 创建连接
ACK 确认响应
FIN 断开连接

二、三次握手(建立连接)

客户端发送一个请求,与服务端建立连接
服务端接受这个请求,并且响应与客户端建立连接的请求
(服务端的响应和请求是在一次发送当中完成的)
客户端接受服务端的请求之后,把消息在响应给服务端接下来客户端和服务端可以发送数据了.
每发送一个数据出去,对应的主机都会有一个回执消息,确认数据的接受情况,
如果没有得到回执消息,该数据会重发一次,保证数据的完整.
不会一直不停的发下去,有时间最大允许周期.

DoS拒绝服务之TCP/SYN洪水攻击

三次握手存在一个安全漏洞,即每次连接申请服务器端都会同意,SYN Flood利用TCP协议缺陷,发送了大量伪造的TCP连接请求,使得被攻击方资源耗尽,无法及时回应或处理正常的服务请求。一个正常的TCP连接需要三次握手,首先客户端发送一个包含SYN标志的数据包,其后服务器返回一个SYN/ACK的应答包,表示客户端的请求被接受,最后客户端再返回一个确认包ACK,这样才完成TCP连接。在服务器端发送应答包后,如果客户端不发出确认,服务器会等待到超时,期间这些半连接状态都保存在一个空间有限的缓存队列中;如果大量的SYN包发到服务器端后没有应答,就会使服务器端的TCP资源迅速耗尽,导致正常的连接不能进入,甚至会导致服务器的系统崩溃。

三、四次挥手(断连接)

客户端向服务端发送一个请求消息,断开连接(代表客户端没有数据传输了)
服务端接受请求 , 发出响应
等到服务端所有数据收发完毕之后
服务端向客户端发送断开连接的请求
客户端接受请求 , 发出响应
等到2msl,最大报文生存时间之后
客户端与服务端彻底断开连接(MSL为最大报文段生存时间
默认规定MSL为2分钟,但实际应用中常用的是30秒,1分钟和2分钟等。)

四、整体缩略图

五、socket

socket的意义:通络通信过程中,信息拼接的工具(中文:套接字)
# 开发中,一个端口只对一个程序生效,在测试时,允许端口重复捆绑 (开发时删掉)
# 在bind方法之前加上这句话,可以让一个端口重复使用
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

六、上网流程

6.1、储备知识点

URL是统一资源定位符,同时也是WWW页的地址,一个完整的URL包括协议部分、网址、文件地址部分

url地址:
http://www.cnblogs.com:80/linhaifeng/articles/6817679.html
三部分组成:http://  (HTTP——HyperText Transfer Protocol(超文本传输协议))ip地址:80(80是端口号)/linhaifeng/articles/6817679.html

6.2、网络通信实现

想实现网络通信,每台主机需具备四要素

  • 本机的IP地址
  • 子网掩码
  • 网关的IP地址
  • DNS的IP地址

获取这四要素分两种方式

1.静态获取

即手动配置

2.动态获取

通过dhcp获取

以太网头 ip头 udp头 dhcp数据包

(1)最前面的”以太网标头”,设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-F

(2)后面的”IP标头”,设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。

(3)最后的”UDP标头”,设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。

这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道”这个包是发给我的”,而其他计算机就可以丢弃这个包。

接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个”DHCP响应”数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。

新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数

6.3、上网流程

1.本机获取

  • 本机的IP地址:192.168.1.100
  • 子网掩码:255.255.255.0
  • 网关的IP地址:192.168.1.1
  • DNS的IP地址:8.8.8.8

2.打开浏览器,想要访问Google,在地址栏输入了网址:www.google.com。

3.dns协议(基于udp协议)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UmamlIWa-1597221533669)(C:\Users\高雨\Desktop\笔记day30 图片\网络通信流程图.png)]

13台根dns:

A.root-servers.net198.41.0.4美国
B.root-servers.net192.228.79.201美国(另支持IPv6)
C.root-servers.net192.33.4.12法国
D.root-servers.net128.8.10.90美国
E.root-servers.net192.203.230.10美国
F.root-servers.net192.5.5.241美国(另支持IPv6)
G.root-servers.net192.112.36.4美国
H.root-servers.net128.63.2.53美国(另支持IPv6)
I.root-servers.net192.36.148.17瑞典
J.root-servers.net192.58.128.30美国
K.root-servers.net193.0.14.129英国(另支持IPv6)
L.root-servers.net198.32.64.12美国
M.root-servers.net202.12.27.33日本(另支持IPv6)

域名定义:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html

顶级域名:以.com,.net,.org,.cn等等属于国际顶级域名,根据目前的国际互联网域名体系,国际顶级域名分为两类:类别顶级域名(gTLD)和地理顶级域名(ccTLD)两种。类别顶级域名是         以"COM"、“NET”、“ORG”、“BIZ”、"INFO"等结尾的域名,均由国外公司负责管理。地理顶级域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国。地理顶级域名一般由各个国家或地区负责管理。

二级域名:二级域名是以顶级域名为基础的地理域名,比喻中国的二级域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.

一般来说,二级域名是域名的一条记录,比如alidiedie.com是一个域名,www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.alidiedie.com的域名全部称作是alidiedie.com的二级

4.HTTP部分的内容,类似于下面这样:

GET / HTTP/1.1
Host: www.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: … …

我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中。

5 TCP协议

TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。

6 IP协议

然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。

IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。

7 以太网协议

最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。

以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。

8 服务器端响应

经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。

根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。

本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。

python学习day30相关推荐

  1. Python学习 Day30 正则表达式(二)

    正则表达式(二) (一)预定义类 预定义类:这个术语,这些特定符号只能在正则表达式中使用 预定义类 作用 \d [0-9] \d可以匹配任意[一个]数字字符 \D 非[0-9] \D匹配任意[一个]不 ...

  2. pygame是python的一个库吗,python学习pygame,,基本库导入impor

    python学习pygame,,基本库导入impor 基本库导入 import pygame import sys from pygame.locals import * 初始化 pygame.ini ...

  3. python科学计数法转换_对比Python学习Go 基本数据结构

    公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...

  4. python学习------tab补全

    python学习------tab补全   python也可以进行tab键补全 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/usr/bin/env  ...

  5. Python学习day5作业-ATM和购物商城

    Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆, ...

  6. Python学习系列(六)(模块)

    Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...

  7. 最新Python学习项目Top10!

    作者 | Mybridge 译者 | Linstancy 整理 | Jane 出品 | AI科技大本营 [导读]过去一个月里,我们对近1000个Python 学习项目进行了排名,并挑选出热度前10的项 ...

  8. 200页!分享珍藏很久的Python学习知识手册(附链接)

    这是之前入门学习Python时候的学习资料,非常全面,从Python基础.到web开发.数据分析.机器学习.深度学习.金融量化统统都有,该手册是HTML版本,左侧是目录,可以点击,右侧是对目录知识点的 ...

  9. Python学习系列(五)(文件操作及其字典)

    Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...

最新文章

  1. swift实现提示框第三方库:MBProgressHUD
  2. 使用Configuration Manager管理移动设备
  3. vue切换路由页面数据缓存_Vue-Router实现前端页面缓存
  4. matlab中欠定方程组超定方程组_七年级下册第10章:认识二元一次方程组(1课时)...
  5. 趣图:你能Get到笑点么?
  6. (06)FPGA资源评估
  7. java设置imageview图片大小_java – 在android中设置imageview
  8. java sax解析器_Java SAX解析器示例
  9. usc2_今天发布:与USC合作的新游戏设计课程
  10. 宏碁服务器u盘装系统,宏基笔记本用u盘装系统操作流程
  11. kafka reassign 限速_高速限速有了新规矩!公路限速标志设计规范即将施行
  12. html点击图片弹出模态框,JS实现图片点击后出现模态框效果
  13. 东方财富通l2决策版_东方财富三季度报点评:券茅券商中的茅台!
  14. 什么是robots.txt文件
  15. Unambiguous Text Localization, Retrieval,and Recognition for Cluttered Scenes
  16. 卫生统计学v是什么意思_卫生统计学 名词解释
  17. ​微信小程序开发难?资深大V教您微信小程序制作步骤和方法​
  18. alueError: With n_samples=1, test_size=0.2 and train_size=None, the resulting train set will be
  19. 专享策略04 | 商品通用套利模型(二)
  20. selenium的常见方法及使用

热门文章

  1. surfacepro3运行C语言,Surface Pro 7评测:性能更强 终于补齐Type-C
  2. 利用IP协议分片实施洪水攻击
  3. 2022年广东工业大学文远知行杯新生程序设计竞赛(10/13)
  4. python批量处理视频教程_《自拍教程72》Python批量重命名视频文件,AV专家必备!...
  5. 模拟地下城与勇士(DNF)的装备强化过程
  6. win8连接wifi成功但受限制_必看丨“格力+”手机APP,智能WiFi连接教程。(含AI语音连接教程)...
  7. 全面分析RHCE7(红帽认证工程师)考试题目之 ----SELinux篇
  8. .net5创建WebApi项目入门教程
  9. CAD二次开发 添加按钮Ribbon
  10. 【有序充电】基于粒子群算法实现电动汽车充电动态优化策略附matlab代码