TCP / IP_tcp 127.0.0.1:62283 127.0.0.1:62284 established 13-程序员宅基地

技术标签: 网络  java基础知识点  网络协议  tcp/ip  

分层模型

应用层一般为程序员经常使用的,就是和具体的协议,具体的程序打交道的层级

 linux实验  通过nc连接 手动将协议发出去,查看响应 ,

[root@centos7 ~]# nc www.baidu.com 80
GET / HTTP/1.0


HTTP/1.0 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 9508
Content-Type: text/html
Date: Wed, 04 May 2022 15:20:15 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
Set-Cookie: BAIDUID=63EB0077D5162BBD716F83210F72D5F3:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=63EB0077D5162BBD716F83210F72D5F3; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1651677615; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BAIDUID=63EB0077D5162BBDA2C898464F4D4E5D:FG=1; max-age=31536000; expires=Thu, 04-May-23 15:20:15 GMT; domain=.baidu.com; path=/; version=1; comment=bd
Traceid: 1651677615282151399410029134630169336004
Vary: Accept-Encoding
X-Frame-Options: sameorigin
X-Ua-Compatible: IE=Edge,chrome=1

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="description" content="全球领先的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。"><link rel="shortcut icon" href="//www.baidu.com/favicon.ico" type="image/x-icon"><link rel="search" type="application/opensearchdescription+xml" href="//www.baidu.com/content-search.xml" titl
[root@centos7 ~]# netstat -natp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1168/sshd  
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1169/cupsd 
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1430/master
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      2613/sshd: root@pts
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN      2727/sshd: root@pts
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      2220/redis-server 1
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      691/rpcbind
tcp        0     48 192.168.0.133:22        192.168.0.1:6674        ESTABLISHED 2727/sshd: root@pts
tcp        0      0 192.168.0.133:22        192.168.0.1:6631        ESTABLISHED 2613/sshd: root@pts
tcp        0      0 192.168.0.133:22        192.168.0.1:6638        ESTABLISHED 2630/sshd: root@not
tcp        0      0 192.168.0.133:59382     39.156.66.14:80         ESTABLISHED 2726/nc    

传输控制层:TCP  UDP  ,TCP面向连接的,可靠的,通过三次握手建立连接,进行数据传输,四次分手。

长连接 / 短连接目前主要由应用层程序来决定的,可控制是否断开,TCP能支持。服务端实现方式为:在服务器中input输入流以前1.0是拿到一次就不读了,1.1开始有循环,可以一直读取数据。

三次握手来建立连接,怎么实现?

传输控制层发了个数据包,携带字段syn发出去,服务端收到了,回一个syn+ack回去,表示确认收到了,第三次,客户端回一个ack。

 三次握手成功,内存里会开辟资源,此时连接进入ESTABLISHED状态,四元组匹配,请求端的ip +端口 和服务端的ip+端口。和四元组匹配,就会转交给相应的进程去处理。可相互通信。如果客户端没收到ack 可进行重试,会有一定的可靠性。三次握手或者程序处于监听状态,对于我们而言,就是一个socket,就是对资源的一个包装。 

程序的读写,其实面向的是socket资源,读的是client的Recv队列,写的时候放到client的Send队列里面。代表服务端即使没有发数据过来,应用依然会去读Recv队列;程序其实只在和单机内部的内核在进行交互,内核如何发送数据出去,是内核进行实现处理的。三次握手,相当于客户端的传输控制层同服务端的传输控制层交互(内核负责处理),而应用程序APP同内核之间是阻塞,还是非阻塞还是多路复用,也就是IO模型(可参考文章网络IO流);socket也叫做套接字(四元组 源IP+port +目标IP+port),插座与插头的关系,套在一起了,能够表示绝对唯一的连接;port端口号是内核提供的有约束的,数量是65535个。

服务端启动后,例:mysql会启动监听进程,占用3306端口号,只要有请求进来,目标端口号是3306就会分配给此进程,去分配资源建立连接。理论上一个客户端主机可以跟此服务端主机此3306端口建立65535个连接(取决于四元组匹配的唯一性)。

四次分手

分的是连接,就是资源释放的过程;因为是可靠连接,所以发分手信息过去都应该有回应。

 最后释放资源对双方都没影响;如果没有这样的流程,则会不可靠,可能存在突然又不想分手的情况;

如果建立连接后,如果网断开了,任何一端是否可以感知连接已经断开这个情况?由于双方是内存开辟资源,是上下层解耦的,没物理层的。所以此时是无法感知网络已经断开的。所以内核为了解决这个问题,内核有一个心跳,keepalive,在不用的时候也会发包过去,内核检查这个连接的心跳有没有,单独检查这个连接(四元组)的健康,即使程序不使用这个连接,也可以告诉你这个连接已经断了。应用程序也可以做心跳,应用层做的心跳,其实检查的是应用空间程序的一些角色的健康(比如某服务器宕机了,但其实还有一台备用机,可以拉起服务,应用程序检测发现服务失败了,可以从注册中心另外一台机器尝试建立服务,继续检测)

查看三次握手,四次分手:

先查看网卡信息:

[root@centos7 ~]# cd /etc/sysconfig/network-scripts
[root@centos7 network-scripts]# ll
总用量 252
-rw-r--r--. 1 root root   351 4月  15 23:04 ifcfg-ens33
-rw-r--r--. 1 root root   254 5月  22 2020 ifcfg-lo

输入命令抓取80端口的包  tcpdump -nn -i ens33 port 80

[root@centos7 /]# tcpdump -nn -i ens33 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes

访问百度80端口,模拟请求断开  curl www.baidu.com:80

[root@centos7 ~]# curl www.baidu.com:80
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet 

此时抓取了整个过程的包 三次握手的信息,本地随机了一个端口去建立连接

[root@centos7 /]# tcpdump -nn -i ens33 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
22:36:23.107931 IP 192.168.0.133.59400 > 39.156.66.14.80: Flags [S], seq 549835220, win 29200, options [mss 1460,sackOK,TS val 4037822 ecr 0,nop,wscale 7], length 0
22:36:23.145704 IP 39.156.66.14.80 > 192.168.0.133.59400: Flags [S.], seq 2027107115, ack 549835221, win 64240, options [mss 1460], length 0
22:36:23.145729 IP 192.168.0.133.59400 > 39.156.66.14.80: Flags [.], ack 1, win 29200, length 0

四次分手

22:36:23.187099 IP 192.168.0.133.59400 > 39.156.66.14.80: Flags [F.], seq 78, ack 2782, win 33580, length 0
22:36:23.187197 IP 39.156.66.14.80 > 192.168.0.133.59400: Flags [.], ack 79, win 64239, length 0
22:36:23.225586 IP 39.156.66.14.80 > 192.168.0.133.59400: Flags [FP.], seq 2782, ack 79, win 64239, length 0
22:36:23.225608 IP 192.168.0.133.59400 > 39.156.66.14.80: Flags [.], ack 2783, win 33580, length 0

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_56754651/article/details/124579935

智能推荐

sqlsugar mysql连接字符串_一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)...-程序员宅基地

文章浏览阅读478次。前言:在本系列第一篇《一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)》中,我为大家介绍了搭建空白解决方案以及在此解决方案中创建目录和对应的项目。本篇将和大家一起学习在项目中使用Nuget引入.NET对应的MySql.Data程序包,以及使用传统的Ado.NET连接MySQL数据库,实现一个简单的查询并将数据转换成泛型对..._sqlsugar changerepository

软件项目经理需具备什么样的技术水平?-程序员宅基地

文章浏览阅读247次。满意答案抒发下个人观点,个人觉得项目的整个阶段还是需要项目经理与开发人员共同协作1、项目经理在对接需求时候要能够比较详细了解客户需求,能够根据需求罗列出具体功能模块,要跟客户多次确认需求,确保在需求阶段的完整性,准确性。2、功能模块整理后,可找开发人员一起开会,讲解客户需求,沟通解决方案,后请开发人员根据功能模块整理具体功能点,复杂程度,需耗工作日等。3、后统一交由项目经理汇总,项目经理需要了..._软件项目负责人技术能力

2021-01-30实习日报_使用自动提交也可以“至少一次”。但是要求你必须下次调用poll(duration)之前或关-程序员宅基地

文章浏览阅读402次。启动kafka下载并解压kafkatar -xzf kafka_2.13-2.7.0.tgzcd kafka_2.13-2.7.0启动服务运行kafka需要使用Zookeeper,可以使用kafka自带打包和配置好的zookeeperxfgg@xfgg-OptiPlex-3050:~/Downloads/kafka_2.13-2.7.0$ bin/zookeeper-server-start.sh config/zookeeper.properties [2021-01-30 10:05:_使用自动提交也可以“至少一次”。但是要求你必须下次调用poll(duration)之前或关

Node.js 目录穿越漏洞(CVE-2017-14849)——漏洞复现_node.js复现 vulhub-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏2次。一、漏洞原理Node.js 8.5.0 对目录进行normalize操作时出现了逻辑错误,导致向上层跳跃的时候(如…/…/…/…/…/…/etc/passwd),在中间位置增加foo/…/(如…/…/…/foo/…/…/…/…/etc/passwd),即可使normalize返回/etc/passwd,但实际上正确结果应该是…/…/…/…/…/…/etc/passwd。express这类web框架,通常会提供了静态文件服务器的功能,这些功能依赖于normalize函数。比如,express在判断path_node.js复现 vulhub

链接器LD的详细信息及其搜索路径揭密_ld 链接器参数-程序员宅基地

文章浏览阅读1.1k次。http://blog.chinaunix.net/u3/97319/showart_2064712.html 链接器LD的详细信息及其搜索路径揭密 [root@localhost lib]# ld --verboseGNU ld version 2.17.50.0.6-9.el5 20061020 Suppo_ld 链接器参数

随便推点

tf.gather()用法详解_gather index超出范围-程序员宅基地

文章浏览阅读2.1k次。tf.gather(params, indices, validate_indices=None, axis=None, batch_dims=0, name=None )请注意,在CPU上,如果找到超出范围的索引,则会返回错误。在GPU上,如果找到越界索引,则将0存储在相应的输出值中。另请参阅tf.gather_nd。import numpy as npimport tensorflow as tflogits = [0,2,2,2,2,3,4,5,6,7,8,9]..._gather index超出范围

人工神经网络与字符分割及识别_字符分割与字符识别-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏19次。模式识别算法交流群:272410620Abstract 2一 引言:... 3二 字符图像获取:... 3三 字符预处理... 43.2 字符区域………………………………………………………………………….43.2 字符区域分割:... 43.3 单个字体分割:... 43.4 单个字体裁剪... 5四 模板字符识别... 54.2 字符模板归一化... 5_字符分割与字符识别

java高铁在线购票系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署_高铁购票系统javamysql-程序员宅基地

文章浏览阅读98次。java高铁在线购票系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署。ssh基于java的网上手机销售管理系统的开发与实现mysql。springboot基于Java的高校教室申请管理系统。ssm基于Java的幼儿早教系统软件的设计与实现。jsp基于SSM的考研信息共享平台的设计与实现。ssm基于Vue.js的音乐播放器设计与实现。ssm基于SSM的英语学习网站的设计与实现。_高铁购票系统javamysql

POJ 1752 Advertisement(差分约束+最短路/最长路+输出路径)_if a>b swap(a,b)-程序员宅基地

文章浏览阅读405次。AdvertisementTime Limit:1000MS Memory Limit:10000K Total Submissions:1098 Accepted:409 Special Judge DescriptionThe Department of Recreation has decided that it ..._if a>b swap(a,b)

P4779 【模板】单源最短路径(标准版)-程序员宅基地

文章浏览阅读55次。这道水题水得有点吃力。。。杨爷出的毒瘤数据。。。首先是非负权图,就用dijkstra。边比较稀疏,用堆优化。再打模板的时候发现问题:在去出堆顶元素的时候,可能会出现重复节点。重复节点使用一个done数组进行标记,如果不给的话会跑得很慢。然后图又可能不连通。。。数据的锅。不连通的dist是\(2^{31} - 1\)。这个是锅。代码:#include<cstd...

FMEA软件之边界图(FMEAHunter)-程序员宅基地

文章浏览阅读2.1k次。FMEA Hunter边界图介绍FMEA在新产品开发或设计变更时,使用边界图(框图或B图)确定分析范围,并分析分析范围内的组件及其接口,以及与客户、制造商、服务商等外部接口,并通过边界图展示产品各系统元素之间的物理和逻辑关系。FMEA Hunter边界图提供了强大的编辑能力,是确定分析范围,进行结构分析与接口功能分析的利器。一、FMEA Hunter边界图创建通过FMEA Hunter边界图软件,轻松画出美观、实用的图形。1. 定义分析范围,本例分析对象是起动机;2. 识别外部组_fmeahunter