Cyber Security · मराठी आवृत्ती
TCP 3-way handshake, flags आणि connection close
या page मध्ये
TCP connection तयार होण्याआधी दोन्ही machines sequence numbers आणि connection state समन्वयाने ठरवतात. SYN → SYN-ACK → ACK हा क्रम पक्का लक्षात ठेवा. Wireshark analysis, firewall states आणि SYN-related security topics याच पायावर समजतात.
Client (192.168.56.10:51544) Server (192.168.56.101:80)
| 1. SYN seq=1000 |
| ---------------------------------------------> | "I want to talk"
| 2. SYN-ACK seq=5000, ack=1001 |
| <--------------------------------------------- | "OK, I heard you"
| 3. ACK seq=1001, ack=5001 |
| ---------------------------------------------> | connection ESTABLISHED
| ... data (PSH/ACK) both ways ... |
| FIN ---------------------------------------> | 4-way close:
| <--------------------------------------- ACK | FIN, ACK, FIN, ACK
| <--------------------------------------- FIN |
| ACK ---------------------------------------> |
- Client
seq=1000असलेला SYN पाठवतो. - Server
seq=5000, ack=1001असलेला SYN-ACK देतो. - Client
seq=1001, ack=5001असलेला ACK देतो. Connection established होतं.
SYN sequence space मध्ये एक number वापरतो, म्हणून या example मध्ये ack एकने पुढे आहे. सामान्य data मध्ये ACK पुढे अपेक्षित असलेला byte number सांगतो; तो प्रत्येक वेळी फक्त seq + 1 असेलच असं नाही.
महत्त्वाचे flags
| Flag | अर्थ | कुठे दिसतो? |
|---|---|---|
| SYN | Sequence numbers synchronize करून connection सुरू करणे | Handshake step 1 and 2, SYN scan (nmap -sS) |
| ACK | मिळालेल्या data ची acknowledgement | Established connection मधल्या segments वर साधारणपणे |
| FIN | Graceful close—माझ्याकडून पाठवणं संपलं | Connection close, FIN scan |
| RST | Connection लगेच reset/नाकारण्याचा संकेत | Closed port कडून reply |
| PSH | Data application कडे पुढे देण्याची सूचना | Interactive traffic |
| URG | Urgent pointer valid आहे | कमी वापर; Xmas scan मध्ये FIN+PSH+URG |
- SYN: connection सुरू करताना sequence numbers synchronize करणे.
- ACK: acknowledgement field महत्त्वाची आहे असं दाखवतो.
- FIN: माझ्या बाजूने आणखी data पाठवणार नाही—graceful close.
- RST: connection तात्काळ reset/नाकारण्याचा संकेत.
- PSH: buffered data application पर्यंत पुढे देण्याची सूचना.
- URG: urgent pointer valid आहे. साध्या traffic मध्ये कमी दिसतो.
Graceful close अनेकदा FIN → ACK → FIN → ACK असा दिसतो. काही messages एकत्र येऊ शकतात; दोन्ही directions स्वतंत्रपणे बंद होतात.
SYN ला मिळणारे replies
| Probe | Server चा reply | Nmap चा निष्कर्ष |
|---|---|---|
| SYN | SYN-ACK | open |
| SYN | RST | closed (host कडून reply आला) |
| SYN | Reply नाही / ICMP unreachable | filtered (filtering किंवा packet loss शक्य) |
SYN-ACK आल्यास port open असल्याचा संकेत; RST आल्यास closed असल्याचा संकेत. Reply नाही किंवा काही ICMP unreachable responses असल्यास scanner “filtered” असा निष्कर्ष काढू शकतो. पण packet loss सारखी कारणंही असू शकतात, म्हणून एका reply वरून firewall निश्चित आहे असं म्हणू नका.
स्वतःच्या web-server lab मध्ये पाहा
sudo tcpdump -i any -nn 'tcp port 80 and (tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0)'
# in another terminal: curl -s http://localhost > /dev/null -> watch SYN, SYN-ACK, FIN
ही मूळ filter command SYN, FIN आणि RST दाखवते; SYN-ACK मध्ये SYN flag असल्याने तो दिसतो. Pure ACK मात्र या filter मध्ये दिसणार नाही. पूर्ण handshake पाहण्यासाठी आपल्या lab capture मध्ये TCP port 80 चा पूर्ण traffic पाहा.
Security मध्ये उपयोग
SYN flood मध्ये handshake पूर्ण न करता अनेक half-open states तयार करण्याचा प्रयत्न होतो. SYN cookies, rate limits आणि AWS Shield सारखं DDoS protection उपयोगी ठरू शकतं. SYN scan मध्ये SYN पाठवून reply तपासला जातो आणि पूर्ण connection ऐवजी RST दिला जाऊ शकतो; nmap -sS हा source मधला संबंधित option आहे.
Practice
स्वतःच्या web-server lab वर दिलेली tcpdump command चालवा. दुसऱ्या terminal मध्ये दाखवलेली curl command वापरा. SYN, SYN-ACK आणि शेवटचे FIN/RST शोधा. नंतर पूर्ण TCP capture मध्ये तिसरा ACK शोधून sequence/ack values जुळवा.