网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月18日漏签0天
广东科学技术职业...吧 关注:129,656贴子:3,469,059
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 24回复贴,共2页
  • ,跳到 页  
<<返回广东科学技...吧
>0< 加载中...

初见网络协议--HTTP,TCP导论

  • 只看楼主
  • 收藏

  • 回复
  • 825395336
  • 我是新生
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
之前写过2篇比较散的,范围较广的自我体会,本来前几个月就想以毕设当蓝本介绍网络爬虫,越写越觉得不好写,很多细节部分做不好,解释不清,为不误人子弟加上懒癌末期便中断了,这次这篇是由于昨晚发生了个事,与加上自己原本有所计划,于是就准备一鼓作气写完这个,这次算小有机会,有预谋的做这个事了。
为避免前篇太过繁琐,将一些想表达的放在最后,如果有童鞋愿意看便到最后看。
注:为能顺利理解,前提知识需要2点,懂一点点编程,知道调用一个函数是怎么样的;知道浏览器是显示的东西由html来的
注2:这里我大多已坚决的观点来表达东西,非常片面,实际情况比我所描述的更为复杂,所以我这里只是帮助童鞋们理解,进一步深入学习得自己来,我尽量把表达的东西说的通俗易懂些,适合各个知识背景不同的童鞋
目录大纲
1.浏览器请求行为(HTTP GET请求)
2.编程模拟浏览器行为
3.TCP socket
4.TCP socket模拟HTTP请求
5.TCP socket 细节
6.TCP socket 的个人理解


  • 825395336
  • 我是新生
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
二楼自占,更新说明专用


2025-07-18 08:11:43
广告
  • 公子n小白
  • 六饭食神
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
前


  • peijiahaoshuai
  • 商业街霸
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
占


  • 825395336
  • 我是新生
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2.编程模拟浏览器行为
浏览器做起来像是一个很简单的操作,完全没难度,不是我们学习编程一般见到的代码,别急,我们先转换为代码的形式看看代码是如何跑的。
注:这里代码用的是python而不是c,c#,java。因为我懒,但是大家应该也是可以类推看懂的吧!

这里是在eclipse下打了断点,停留在取得响应的时刻,在console打出了响应体,首部用查看expression的形式表示出来,是不是和浏览器里一样!
但是我们还是无法看清到底什么是HTTP协议,具体究竟是什么。在这里,我先介绍在tcp/ip协议栈中处于传输层的tcp协议的实现:tcp socket,然后再接着介绍位于传输层之上,位于应用层的http协议。


  • 825395336
  • 我是新生
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
4.TCP socket模拟HTTP请求
现在,介绍完基本的socket,我们回看第2节,看http服务器是怎么进行运行的。

先创建一个客户端socket,构造一个数据包,也就是一个字符串,这里用了python的特殊语法,看console的第一行可以看出这个字符串就是每一行后面都主动加了个换行符\n(其实好像正确的是\r\n,但是茁壮的服务器可以处理这2种格式,我就偷下懒),这串东西,就是http协议的请求格式了,就是这样构造来的,但主要的是前2行,其他都可以删除掉,这样服务器就当其他参数都是默认的值进行响应(猜测,但删掉是没问题的,说明前2行是最为重要的)。这里,是不是可以理解所以的web服务器的工作原理,原来都是socket来的!tomcat,apache等等等等。。


  • 825395336
  • 我是新生
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
写太急太仓促好像不太好,上班,下午完成他,题目话说不能叫导论,应该叫概论来的,,,,,


  • 825395336
  • 我是新生
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
5.TCP socket 细节

说到tcp,你也许会听说过,三次握手,四次挥手,why,我们慢点再说,先看看我们刚才模拟http请求的tcp socket 发生了什么

(蓝色的是因为鼠标选中后无法取消的缘故,软件原因)
我本机ip是10.20.96.141,操作系统会随机给我一个端口(12694)来建立与服务器的80端口的连接,先是发生一个syn标识,收到syn之后,需要返回一个ack,说明收到了,再发个syn回去,这时syn和ack就结合在一个包里面了,然后对端需要再发一个ack也确认一次

这3次“握手”结束后,相当于connect成功,accept可以返回一个连接了。
一个连接需要源ip,port与目标ip,port来确定,构成一个四元组,加上一个协议类型(tcp),构成一个五元组。
一个客户端连接只能连接一个服务端,一个服务可以接收多个连接(这里有个地方我暂时没理好,accept返回的连接明显不是原来监听端口的那个连接,那么这个连接是啥,是否有端口,这里我初学还没搞好)。
建立连接完,本机像服务端发送一个get请求,服务端显示响应一个ack标识表示成功接收(tcp无法保证对端一定能够成功接收到,比如突然线路断开了,但是,他可以对无法正常接收到的错误进行提示)。
当接收到响应时,本机马上调用close关闭连接,确认收到响应的ack与关闭连接的fin标识就一起发出去了,服务端就建立连接似的把ack和第二次fin一起发回来了,说好的四次挥手呢?
个人理解:原来,由于网络不是快速的,假如一方发出的fin在另一方接收前,另一方也发出了fin标识,那么,他们还得再各自发生一个ack,这样就是四次了。
上图的意思则大概是,一方数据读写完毕,发送fin标识,另一方接收到后,反馈一个ack,但是数据还未读写完成,还没准备好关闭,于是继续读写,待完全读写完成后,再发出fin标识,这时双方才算可以完全的关闭连接。由一张图来表示socket处于不同时期的状态表示:

一些名词我表述的不是很好,只能拿来粗略理解,见谅


2025-07-18 08:05:43
广告
  • 825395336
  • 我是新生
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
6.TCP socket 的个人理解
其实我们用到的就前面几节那几行代码,后面一大堆乱七八糟看起来也乱七八糟,我们看一眼都不想继续看下去了,有必要看吗?一个函数就可以get了,我们还需要自己用socket来搞一些格式是如何如何放这些操作吗?
我个人觉得还是有必要的,虽然用到情况比较少,比如,当你直接调用get的时候,他用的是同步的socket,同步代表着如果服务无法尽快响应的话,他将阻塞在那里,这会出现什么问题,你每秒需要有1000个连接访问那个服务器,虽然服务器响应慢了,但还是可以正常响应每个请求,但你这边就影响到你的客户端后续新请求的发起实际的压力可能就只有700+了,无法达标,如果没有理解到里面的实现,你就不会自己构造数据包来借助异步socket解决这个问题。以及,当访问出现问题,查看当前连接状态,了解连接在哪一步出现定位bug,似乎是余弦说的:没有解决不了的困难,只有定位不出的bug,debug,不仅仅只是用ide自带的debug工具,还学会从多方面进行分析,CS,debug能力非常重要,将来boss们肯定不能一步步带你们工作,这些都得自己锻炼起来。


  • 825395336
  • 我是新生
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有空再补下后记:


  • _伊向东
  • 中广舞魁
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
先赞了再说....


  • maojgod
  • 闲逛校园
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
火钳刘明


  • 小波波
  • 广科湖畔
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好复杂


  • mmmm灬6956
  • 紫荆花开
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
算了,我还是去搞路由器好了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 24回复贴,共2页
  • ,跳到 页  
<<返回广东科学技...吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示