目录

一、套接字
  1、HTTP与Apache
  2、应用层协议:HTTP
  3、套接字(IP+协议端口的组合)
  4、套接字图示
  5、套接字相关知识点
二、HTTP
 
 
 
 

一、套接字

 
 

1、HTTP与Apache

  HTTP:软件包的包名
  Aapache:软件名
 
 
 

2、应用层协议:HTTP

 
  HTTP协议是应用层协议,同层的协议还有FTP、SMTP、DNS、RPC等

 
 
3、套接字(IP+协议端口的组合)
 
  套接字地址:IP地址和端口号,合称为套接字地址-socket address
 
  在建立通信连接的每一端,进程间的传输要有两个标志:
 
  客户机套接字地址:定义了一个唯一的客户进程
 
  服务器套接字地址:定义了一个唯一的服务器进程

                  套接字:IP地址+端口的组合

 
 
 每个应用程序在同一台主机上,各自有各自的端口号,不会出现两个进程使用同一个端口号的情况。
 
因此,通过IP地址,我们可以找到网络中具体的主机。通过协议对应的端口,我们就唯一地确定了这台主机上应用程序。
 
进而,通过IP地址+协议端口号组成socket,就可以唯一的标识网络通信中双方的地址了,这其中一个是客户端套接字地址,
 
另一个就是服务器套接字地址。
 
 
4、套接字图示
 

  从图中可以看出,位于应用层有多个用户进程,处理这些进程的Socket套接字层如何区分它是哪个应用程序能?
靠的就是协议加端口号。如,当用户访问TCP的80端口,很容易就得出用户的请求响应该回给HTPP还是DNS。
 
 
 

5、套接字相关知识点
 

Socket:
  套接字,进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上,不同进程之间 进行通信和数据交换。
  Socket API于1983年在BSD 4.2上出现。
 
Socket API:
  封装了内核中所提供的aocket通信相关的系统调用
 
Socket Domain:
  根据其所使用的地址分为以下三类
 
  AF_INET: 主要用于IPV4
  AF_INET6: 主要用于IPV6
  AF_UNIX: 同一主机上,不同进程之间通信使用
 
 
 

6、套接字函数
 
 

建立连接前
 
1)服务器端开启创建一个socket对象;
2)创建好的socket绑定一个协议、端口、本地地址等信息;(如ipv4某地址绑定tcp80的端口)
3)将socket置于监听listen状态; (准备开张营业接待用户)
4)客户端也创建一个socket,不同于服务器它不需要绑定端口,因为客户端使用的是随机端口。
5)客户端调用connect函数,发起请求去连接服务器。connect里写入了要连接的对象信息,如服务器ip、端口信息等;
 
建立连接后(双方都处于可发可收)
 
6)服务收到客户端的请求,将对该请求做出响应,如给他发送数据,或接收数据。
同时,客户端也是可以做出接收或发送数据的action.
 
关闭连接
 
7)数据收发完后,双方可以断开连接
 

7、套接字相关系统调用
 
  

  socket(): 创建一个套接字
  bind(): 绑定IP和端口
  listen(): 监听
accept(): 接收请求
connect(): 请求建立连接
write(): 发送
read(): 接收
closed(): 关闭连接
 
 
 
8、Socket模块代码赏析
 
 
  

import socket #
HOST='127.0.0.1' #
PORT=9527
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
sock.send('hello, tcpServer!') #
recv=sock.recv(BUFFER) #
print('[tcpServer said]: %s' % recv) #
sock.close()
 
 

9、HTTP通信过程
 

 
 
二、HTTP相关术语
 
1、HTTP相关术语
 
http: Hyper Text Transfer Protocol,超文本传输协议, 80/tcp
html: Hyper Text Markup Language 超文本标记语言,编程语言
 
 
 html示例:
<html>
<head>
<title>html语言</title>
</head>
<body>
<h1>标题1</h1>
<p><a href=http://www.magedu.com>马哥教育</a>欢迎你</p>
<h2>标题2</h2>
</body>
</html>
 
 
CSS: Cascading Style Sheet 层叠样式表
 
js: javascript
 
 
MIME: Multipurpose Internet Mail Extensions (最早来源于邮件传输技术)
 
 
多用途互联网邮件扩展 /etc/mime.types
 
格式:major/minor
 
text/plain
text/html
text/css
image/jpeg
image/png
video/mp4
application/javascript
 
 
 
 
 
2、URI、URL和URN
 
URI: Uniform Resource Identifier 统一资源标识,分为URL和URN
 
URN: Uniform Resource Naming,统一资源命名
 
示例: P2P下载使用的磁力链接是URN的一种实现
 
  magnet:?xt=urn:btih:660557A6890EF888666
 
URL: Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置
 
 
URN与URL区别:(人名与住址)
 
URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查
 
找该事物的方法。URN仅用于命名,而不指定地址
 
 
URL的组成
 
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
 
schame: 方案,访问服务器以获取资源时要使用哪种协议(http、ftp、trsp等)
user: 用户,某些方案访问资源时需要的用户名。(一般匿名不写)
password: 密码,用户对应的密码,中间用:分隔。
 
Host: 主机,资源宿主服务器的主机名或IP地址
port: 端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号(系统默认端口可省略)
 
path: 路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params: 参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query: 查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag: 片段,锚点。一小片或一部分资源的名字,此组件在客户端使用,用#分隔
 
 
url中的查询
  如电商购物网站搜索产品,在url中会产生查询后台数据库的keyword,这就是查询

url中的锚点
  如网页内容太长,选中该字母则跳转到该字母所在区域,url中以#标识
 

URL示例

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

 

 
3、HTTP协议介绍
 
持久连接:建立连接以后三次握手建立连接后不断开,在连接里可以持续发起请求。持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。
 
管道机制(pipelining):即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率
 
队头堵塞:同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-line blocking)
 
头信息帧和数据帧:头信息和数据体都是二进制,称为头信息帧和数据帧
 
多工(Multiplexing):复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通信称为多工(Multiplexing)
 
头信息压缩机制(header compression):头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
 
服务器推送(server push):HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送(server push)
 
 
 
 
 
 
 
 
 
 

HTTP一、HTTP介绍与套接字的更多相关文章

  1. [网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序]

    [网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序] 为何学习socket套接字一定要先学习互联网协议: 1.首先:要想开发一款自己的C/S架构软件,就必须掌握socket ...

  2. (转载)Linux 套接字编程中的 5 个隐患

    在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性.事实上,很难找到一种不支持 Sockets API 的现代语言.该 API 相当简单,但新的开 ...

  3. windows和linux套接字中的select机制浅析

    先来谈谈为什么会出现select函数,也就是select是解决什么问题的? 平常使用的recv函数时阻塞的,也就是如果没有数据可读,recv就会一直阻塞在那里,这是如果有另外一个连接过来,就得一直等待 ...

  4. UNIX网络编程——原始套接字的魔力【下】

    可以接收链路层MAC帧的原始套接字 前面我们介绍过了通过原始套接字socket(AF_INET, SOCK_RAW, protocol)我们可以直接实现自行构造整个IP报文,然后对其收发.提醒一点,在 ...

  5. Go中原始套接字的深度实践

    1. 介绍 2. 传输层socket 2.1 ICMP 2.2 TCP 2.3 传输层协议 3. 网络层socket 3.1 使用Go库 3.2 系统调用 3.3 网络层协议 4. 总结 4.1 参考 ...

  6. 服务器编程入门(13) Linux套接字设置超时的三种方法

    摘要:     本文介绍在套接字的I/O操作上设置超时的三种方法. 图片可能有点宽,看不到的童鞋可以点击图片查看完整图片.. 1 调用alarm 使用SIGALRM为connect设置超时 设置方法: ...

  7. TCP/IP网络编程之网络编程和套接字

    网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...

  8. socket套接字编程 HTTP协议

    socket套接字编程  套接字介绍  1. 套接字 : 实现网络编程进行数据传输的一种技术手段  2. Python实现套接字编程:import  socket  3. 套接字分类 >流式套接 ...

  9. 【TCP/IP网络编程】:09套接字的多种可选项

    本篇文章主要介绍了套接字的几个常用配置选项,包括SO_SNDBUF & SO_RCVBUF.SO_REUSEADDR及TCP_NODELAY等. 套接字可选项和I/O缓冲大小 前文关于套接字的 ...

随机推荐

  1. Linux root目录下.gvfs问题处理

    最近收到一些关于磁盘的告警. 查了一下相关的信息. 知道了.gvfs文件夹是GNOME桌面系统的虚拟文件系统.可能是一些其它远程桌面之前连接所产生的一个文件,确定没有人再远程后.可以手动干掉它. 通过 ...

  2. Web用户登录---验证码的设计与实现

    在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式. 验证码生成步骤:1.获得随机生成的颜色,画出随机线条生成背景底.2.String cod ...

  3. Linux - Ubuntu 图形界面入门

    Ubuntu 图形界面入门 目标 熟悉 Ubuntu 图形界面的基本使用 01. Ubuntu 的任务栏 02. 窗口操作按钮 03. 窗口菜单条 ——本文源自<黑马程序员>

  4. angularJS+KindEditor无法获取或清空textarea的值

    在html页面中初始化KindEditor: <script type="text/javascript"> var editor; KindEditor.ready( ...

  5. CentOS 7 安装phpredis和redis(接上一篇centos7安装lnmp)

    一.安装扩展phpredis 1.PHP7 安装redis 扩展phpredis cd /root/software wget https://github.com/edtechd/phpredis/ ...

  6. 【noip模拟赛5】细菌 状压dp

    [noip模拟赛5]细菌   描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...

  7. Python学习笔记十_模块、第三方模块安装、模块导入

    一.模块.包 1.模块 模块实质上就是一个python文件.它是用来组织代码的,意思就是把python代码写到里面,文件名就是模块的名称,test.py test就是模块的名称 2.包 包,packa ...

  8. vue学习笔记(WebStorm安装)

    慕课网:https://www.imooc.com/video/18553 一.前往官网下载:https://www.jetbrains.com/webstorm/download/#section= ...

  9. MySQL数据库(增删改查语句)

    MySQL数据库(增删改查语句)一.登录数据库:---->  mysql -uroot -proot;(对应用户名和密码)二.SQL语句:    数据定义语言DDL  用来定义数据库.表.列,关 ...

  10. 人脸检测(1)——HOG特征

    一.概述 前面一个系列,我们对车牌识别的相关技术进行了研究,但是车牌识别相对来说还是比较简单的,后续本人会对人脸检测.人脸识别,人脸姿态估计和人眼识别做一定的学习和研究.其中人脸检测相对来说比较简单, ...