服务器无法在发送 http 标头之后设置内容类型。_python socket编程预知内容
socket:運用IP地址+協議+端口 標識一個進程
我們知道兩個進程如果需要進行通訊最基本的一個前提能能夠唯一的標示一個進程, 在本地進程通訊中我們可以使用PID來唯一標示一個進程,但PID只在本地唯一,網絡中的兩個進程PID沖突幾率很大 ,這時候我們需要另辟它徑了,我們知道IP層的ip地址可以唯一標示主機,而TCP層協議和端口號可以唯一標示主機 的一個進程,這樣我們可以利用ip地址+協議+端口號唯一標示網絡中的一個進程要想進程進行通訊,要給這兩個進程,分別做一個唯一的標記
- socket: 被標識的進程,能利用socket進行網絡通信了。
- socket是在應用層和傳輸層之間的一個抽象層
- 把TCP/IP層復雜的操作,
- 抽象為幾個簡單的接口,
- 供應用層調用已實現進程在網絡中通信。
網絡通信實現:
網絡通信duan機需具備四要素本機的IP地址 子網掩碼 網關的IP地址 DNS的IP地址 獲取這四要素分兩種方式1.靜態獲取 即手動配置 2.動態獲取 通過dhcp獲取以太網頭 ip頭 udp頭 dhcp數據包(1)最前面的”以太網標頭”,設置發出方(本機)的MAC地址和接收方(DHCP服務器)的MAC地址。 前者就是本機網卡的MAC地址,后者這時不知道,就填入一個廣播地址:FF-FF-FF-FF-FF-FF。 (2)后面的”IP標頭”,設置發出方的IP地址和接收方的IP地址。這時,對于這兩者,本機都不知道。 于是,發出方的IP地址就設為0.0.0.0,接收方的IP地址設為255.255.255.255。 (3)最后的”UDP標頭”,設置發出方的端口和接收方的端口。這一部分是DHCP協議規定好的,發出方是68端口, 接收方是67端口。 1.以太網標頭: 設置 本機MAC地址 服務器MAC地址 2.IP標頭 : 設置 本機IP地址 服務器IP地址 3.UDP標頭:設置 本機端口 服務器端口這個數據包構造完成后,就可以發出了。以太網是廣播發送,同一個子網絡的每臺計算機都收到了這個包。 因為接收方的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服務器等等參數網絡通信流程:一下內容均摘自我的老師的博客
1.本機獲取
- 本機的IP地址:192.168.1.100
- 子網掩碼:255.255.255.0
- 網關的IP地址:192.168.1.1
- DNS的IP地址:8.8.8.8
2.打開瀏覽器,想要訪問Google,在地址欄輸入了網址:http://www.google.com。
3.dns協議(基于udp協議)
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,.http://gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是http://www.abc.com或者*.abc.com.
一般來說,二級域名是域名的一條記錄,比如http://alidiedie.com是一個域名,http://www.alidiedie.com是其中比較常用的記錄,一般默認是用這個,但是類似*.http://alidiedie.com的域名全部稱作是http://alidiedie.com的二級
4.HTTP部分的內容,類似于下面這樣:
GET / HTTP/1.1Host: http://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響應以后,就可以將網頁顯示出來,完成一次網絡通信。
總結
以上是生活随笔為你收集整理的服务器无法在发送 http 标头之后设置内容类型。_python socket编程预知内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle最快访问行,Oracle技术
- 下一篇: 人工智能只能用python吗_为什么人工