제어 플래그
CWR
/ ECE
: 혼잡 제어
URG
: Urgent Pointer 에 값이 있으면 1
, 없으면 0
, 순서 상관없이 먼저 전송됨
(강사님: Urgent Pointer - 데이터 일부분에 긴급 데이터 위치를 마킹해주는 것. 먼저 전송되지는 않음. 우선 처리되도록 우선순위를 높이는 정도?)
ACK
: AcKnowledgement Number 필드에 유효한 값 있으면 1
, 0
이면 Acknowledgement Number 필드 무시. TCP 연결 시작후 항상 1
임
PSH
: 1
이면 버퍼링된 데이터를 상위계층으로 빠르게 전달할 수 있게 함 (여기가 마지막 패킷이야~ 조립해서 위로 올려보내렴)
RST
: 강제로 연결 초기화 (LISTEN, SYN_RCVD 상태를 제외하고 이 플래그가 1
이면 CLOSED 상태 됨), 한쪽에서 일방적으로 연결 해제 (정상적인 연결해제는 양쪽에서 해제)
*제외된 상태는 RST 수신하면 LISTEN 상태가 됨 (아직 연결된 상태가 아니므로)
SYN
: 연결 시작을 위한 비트
FIN
: 연결 종료를 위한 비트
Sliding Window Algorithm
헤더에서 Window 필드가 재전송에 사용된다고 했는데, 위 그림처럼 전송 실패에도 데이터가 버퍼에 아직 저장되어 있기 때문에 재전송이 가능함
Sliding Window Algorithm?
수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ACK) 없이 전송할 수 있게 하여 흐름을 동적으로 조절하는 제어 알고리즘
윈도우에 포함되는 모든 패킷을 전송하고, 전송이 확인되는(ACK) 대로 윈도우를 옆으로 옮겨(slide) 다음 패킷들을 전송하는 방식
ACK 없이 전송? ACK가 올때까지 윈도우가 모두 소진되지 않으면 기다리는 시간 없이 패킷 전송
- 수신 윈도우보다 작거나 같은 크기로 송신 윈도우를 지정하게 되면 전송된 바이트가 수신 윈도우에 저장되다가 초과되지 않으므로 위와 같은 상황이 가능
- 송신 윈도우 = 전송 후 ACK 받지못한 바이트 + 전송될 바이트
TCP는 정확하고 신뢰성 있는 전송을 하기 위해 헤더가 복잡했지만, UDP는 신뢰성보단 신속! 이기 때문에 헤더가 간단함
3-way handshake: 세션을 연결 설립
(3WH 이후 연결 지향적, 세션 연결 유지)
4-way handshake: 세션을 종료
TIME_WAIT
상태일 때 클라이언트가FIN
을 수신하더라도 일정시간 세션을 유지함
서버에서 FIN을 전송하기 전에 클라이언트가 전송한 패킷이 라우팅 지연이나 패킷 유실로 인한 재전송 등으로 인해 해당 ACK 패킷이 FIN 패킷보다 늦게 도착하는 상황이 발생할 수 있기 때문임
따라서 클라이언트는 서버로부터 FIN을 수신하더라도 일정시간(default 240) 동안 세션을 남겨놓고 남은 패킷을 기다림
ipconfig /all
ifconfig -a
arp -a
route print
, netstat
(mac)ping 도메인 주소 or IP 주소
tracert IP 주소
traceroute IP 주소
netstat -an
NetBios Cache 정보 확인
window: nbtstat -n
DNS Cache 정보 확인
window: ipconfig /displaydns
mac: dscacheutil
(파라미터는 모르겠음)