标签:linux
个把月前,阿拉在某处看到有人对大神的描述——公司内部加外援搞了几天没解决的网络问题,只见那人抓了数据包,分析出数据首部信息有误,然后用了某工具将1改成了0,遂网络恢复。
阿拉以为那是很神奇的技能。直到今天了悟,神奇的技能是人人皆能习得的。
啊呀,甚至不能说是神奇。只是算是职业素养的范畴。大概是厉害的师傅领阿拉入的门,阿拉觉得自己将会无所不能呢。
虽然讲知识的前辈多的是,阿拉就以平级的理解来说点接地气的东西吧。但愿你也能在平辈的论述中理解晦涩的言论,然后逐渐的,形成适合自己的知识探究体系。
之前阿拉写过浅谈主机间网络通信实际过程。现在看来是有诸多诟病的。知识是递进的,不是模块化的,我们总在推翻自己之前的观点,那啥,对,推陈出新,也就这么回事。啊啊,其实主要是不够完善,想来是那时候还太悠哉了,写东西也慢的不行,效率捉急0.0。
为了尽量全面,阿拉所言并不深入,甚至每个小部分深究都是大学问。这里就以宽度为主了,深度交给你。
好,来看。
PART1.Internet网络通信
套接字地址
在建立通信连接的每一端,进程间的传输要有两个标志:
IP地址和端口号,合称为套接字地址 socket address
客户机套接字地址定义了一个唯一的客户进程
服务器套接字地址定义了一个唯一的服务器进程
IP地址确定主机,端口号确定应用程序。就像收快递有了地址的大范畴还要有手机号姓名落实到个人。
默认端口常常忽略不写。http的默认端口为80,若端口号为8080时,就要写成诸如192.168.0.10:80的形式了。
socket套接字
进程间通信IPC的一种实现,允许不同主机或同一主机上不同进程之间通信和数据交换。
Socket API(应用程序接口):封装了内核中所提供的socket通信相关的系统调用(应用程序位于用户空间,经kernel调用内存信息,然后将处理后的信息由kernel传达至应用,这一过程要使用套接字。)
Socket Domain:根据所使用的地址分为
AF_INET:Address Family,IPv4
AF_INET6:IPv6
AF_UNIX:同一主机上不同进程之间通信时使用(为了方便数据传输。同一主机不同进程还要跨网络的话太麻烦啦!)
Socket Type:根据使用的传输层协议
SOCK_STREAM:流,tcp套接字,可靠传输,面向连接
SOCK_DGRAM:数据报,udp套接字,不可靠传输,无连接
SOCK_RAW:裸套接字,无须tcp或udp,app直接通过IP包通信(即同一主机不同进程通信使用)
socket套接字函数:
套接字相关的系统调用:socket():创建一个套接字;bind():绑定IP和端口;listen():监听;accept():接收请求;connect():请求连接;write():发送;read():接收;close():关闭连接。
http服务通信过程:
URL:统一资源定位符。即浏览器地址栏的那串长长的网址。
URL组成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
schame:方案,访问服务器以获取资源时要使用哪种协议
user:用户,某些方案访问资源时需要的用户名
password:密码,用户对应的密码,中间用:分隔
Host:主机,资源宿主服务器的主机名或IP地址
port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔
http://www.magedu.com:8080/images/logo.jpg
ftp://mage:password@172.16.0.1/pub/linux.ppt
rtsp://videoserver/video_demo/
Real Time Streaming Protocol
http://www.magedu.com/bbs/hello;gender=f/send;type=title
https://list.jd.com/list.html?cat=670,671,672&ev=149_2992&sort=sort_totalsales15_desc&trans=1
http://apache.org/index.html#projects-list
必要工具包
http-tools
配置文件功能配置
(未完)
本文出自 “RightNow” 博客,请务必保留此出处http://amelie.blog.51cto.com/12850951/1972990
标签:linux
原文地址:http://amelie.blog.51cto.com/12850951/1972990