S7以太網協議屬於TCP/IP協議族的一種,下圖為S7以太網協議在ISO-OSI參考模型中的位置。

通過WireShark抓包,可以看出S7以太網協議的模型:
ISO-OSI參考模型、TCP/IP模型及S7以太網協議模型對比
| ISO-OSI參考模型 |
TCP/IP模型 |
S7以太網協議模型 |
|
| 7-應用層 |
4-應用層 |
6-S7 Communication |
|
| 6-表示層 |
5- COTP(TSAP) |
RFC1006 |
|
| 5-會話層 |
4-TPKT |
||
| 4-傳輸層 |
3-傳輸層 |
3-TCP(102端口) |
|
| 3-網絡層 |
2-網絡互連層 |
2-IP |
|
| 2-數據鏈路層 |
1-網絡接口層 |
1-工業以太網 |
|
| 1-物理層 |
|||
第5層(相對於ISO-OSI參考模型):TPKT(ISO Transport Service ontop of the TCP/ ISO傳輸服務通過TCP),介於TCP和COTP協議之間。這是一個傳輸服務協議,主要用來在COTP和TCP之間建立橋梁,包含了上層協議數據包的長度。

第6層(相對於ISO-OSI參考模型):COTP(Connection OrientedTransport Protocol/面向連接的傳輸協議),比較TCP與COTP兩種協議,因為它們都是用於通過網絡可靠地傳輸用戶數據,基於數據流的與基於數據包的:COTP將數據包從一個用戶傳輸到另一個用戶,所以接收者將獲得與發送者傳輸完全相同的數據邊界。TCP將連續的數據流傳輸到接收器,因此TCP上的協議通常必須自己添加這樣的邊界(如TPKT協議)。

為了復用客戶端和服務端之間的幾個會話,COTP使用了TSAP(傳輸服務訪問點),TSAP為2個字節,通常使用一個有意義的字符串。TSAP的第2個字節由機架號+插槽號組成,插槽號在0-4Bit機架號在5-7Bit。這些TSAP在連接建立階段被匹配,並且在數據傳輸時由2字節(目標/源)參考代替。
下圖示例為SIMATIC NET OPC與S7-200 SMART PLC 通過S7以太網協議通訊的COTP TSAP設置值

通過WireShark抓包,COTP的連接報文如下:


為什么要使用RFC 1006 協議擴展
RFCs(Request for Comments) 是一些技術類文檔, 內容包括針對-例如以太網結構,協議的設計,email 報文頭設計等等進行了詳細的描述。 RFC 1006 中的“ISO Transport Service on top of theTCP(TPKT)”(ISO傳輸服務通過TCP)是TCP協議的一種擴展。這意味着除了TCP數據,在通訊雙方之間還可以提供特殊的傳輸服務(ISO服務)。
當數據使用TCP協議進行傳輸時,傳輸工作聚焦在數據流上。因此沒有關於數據長度或者數據起始以及終止的信息。這對於發送方沒有問題,因為它知道所要發送的字節數。但對於接收方來講,它無法知道該信息什么時候開始,什么時候結束,以及下一條信息什么時候被發送。
在許多自動化應用中,必須要關注工作信息。信息塊通過一個連接由發送方發出,其完整性由接收方進行確認。為了進行這樣的確認,RFC1006規定了在數據前面必須要加上報文頭。RFC1006因此提供了這樣一種應用,及根據TCP協議建立數據流,但面向消息進行傳輸。
第7層(相對於ISO-OSI參考模型)S7 Communication應用協議(協議ID=0x32),包含三部分:1-Header;2-Parameter;3-Data。根據功能(S7Comm.Parameter.Function )不同,S7 Communication協議的結構會有所不同。例如,請求數據報文只包含前兩部分。

應答數據報文為3部分包括數據Data 段

S7Communication應用協議中Parameter.Function的取值對應的功能如下表:

下圖為S7以太網通訊客戶端從建立TCP連接到讀取到服務端數據的整個過程

1.握手
當客戶端192.168.1.101與服務端192.168.1.200通過Socket建立連接時,會進行“三次握手”,這是標准的TCP連接方式,這個過程會由Socket自動完成;
2.通訊請求
在“握手”之后,並不能馬上進行數據交換,還需要“通訊請求”過程。
這個過程包含兩次報文交換:
-
客戶端發送COTP報文給服務端,在COTP報文中包含“連接請求”和“Destination TSAP”,以明確CPU的機架號和槽號;服務端應答COTP報文,包含“連接確認”;這樣服務端就清楚了客戶端需要和哪個CPU來進行數據通訊;
-
客戶端發送S7 Communicaton報文給服務端,在S7Communicaton報文中包含“通訊請求”; 服務端反饋S7 Communicaton報文。
-
交換數據
通訊應用就在這個過程內完成,可以組織報文來實現需要的功能。這個過程內的報文是S7 communicaton,具體實現時,需要對S7協議中的第5、6、7層進行編程。
注意,如果不進行“第2步-通訊請求”而直接發送交換數據報文,則服務端會將連接斷開。
