컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호.
OSI 참조 모델에서 제3계층인 네트워크 계층에 위치하는 네트워크 프로토콜
네트워크상의 기기에 대한 주소를 할당하는 역할과 그 주소를 바탕으로 패킷을 전송하는 역할을 함
IP는 송신 데이터가 되는 패킷을 TCP/UDP와 같은 상위 계층으로부터 전달 받으면 IP 헤더라는 정보를 추가하여 네트워크로 내보낸다.
패킷(packet) : 작게 분할된 데이터 덩어리 (택배)
IP헤더 : IP주소를 중심으로 한 정보의 집합 (택배에 붙어있는 운송장과 비슷)
| 구분 | 내용 |
|---|---|
| 받는 곳 | 192.168.0 (네트워크 주소) |
| 받는 사람 | 3 (호스트 주소) |
| 보내는 곳 | 192.168.0 |
| 보내는 사람 | 2 |
IP에는 경로를 선택하는 방법에 대해서도 정의되어 있어 여러 개의 네트워크를 걸친 통신도 가능
네트워크에 연결되어 있는 네트워크 기기나 네트워크의 연결 포인트를 통틀어 노드라고 한다.
보내는 측과 받는 측의 데이터 처리 속도 차이를 조절해줌 (호스트-호스트)
만약 ''송신측의 전송량 > 수신측의 전송량'' 일 경우 전송된 패킷은 수신측의 큐를 넘어서 손실될 수 있기 때문에 송신층의 패킷 전송량을 제어

슬라이딩 윈도우

위와 같은 구조에서 데이터 0,1을 전송했다고 가정
슬라이딩 윈도우의 구조는 다음과 같이 변하며 윈도우의 크기는 전송한 데이터 프레임만큼 줄어들게 됨

만약 수신측으로부터 ACK패킷프레임을 받게되면 ACK프레임에 따른 프레임의 수만큼 오른쪽으로 경계가 확장됨

네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지(호스트 - 네트워크)
송신된 패킷이 네트워크 상의 라우터가 처리할 수 있는 양을 넘어서 혼잡하게 되면 데이터가 손실될 수 있기 때문에 송신측의 전송량을 제어
합 증가/ 곱 감소 (AI/MD)
슬로우 스타트

- AI/MD 방식과 마찬가지로 패킷을 하나씩 보내는 것부터 시작
- 패킷이 문제없이 도착하면 각각의 ACK패킷마다 window size를 1씩 늘림
- 즉 한 주기가 지나면 window 사이즈가 2배로 됨 (지수함수꼴로 증가)
초기 혼잡 윈도우 크기 1로 전송 = 전송 호스트는 하나의 패킷만 전송
2) 수신 호스트로부터 수신응답을 수신하면 윈도우의 크기를 2로 하여 전송
3) 수신 호스트로부터 수신응답을 수신하면 윈도우의 크기 4로 하여 전송
4) 수신 호스트로부터 수신응답을 수신하면 윈도우의 크기 8로 하여 전송
- 미리 정해진 임계값에 도달할 때까지 증가
- 임계값에 도달하면 혼잡회피 단계로 넘어감
- 혼잡회피 : 윈도우의 크기가 임계값에 도달한 이후에 데이터의 손실이 발생할 확률이 높아지게 되어 데이터의 전송에 있어 조심하는 단계

전송한 데이터에 대한 ACK를 받으면 윈도우의 크기를 1씩 증가시킴
(전송하는 데이터의 증가를 왕복시간 동안에 하나씩만 증가시킴)
수신호스트로부터 일정시간동안까지 ACK를 수신하지 못하는 경우: 타임아웃
- 네트워크에 혼잡이 발생하였다고 인식
- 윈도우의 크기를 1로 줄임
- 동시에 임계값을 패킷 손실이 발생하였을 때의 윈도우 크기의 반으로 줄임
오류검출과 재전송
ARQ(Automatic Repeat Request)기법을 사용하여 프레임이 손상되었거나 손실되었을 경우 재전송을 통해 오류를 복구
정지-대기-ARQ

송신측은 수신측에서 보내준 ACK를 받을 때까지 프레임의 복사본 유지
식별을 위해 데이터 프레임과 ACK프레임은 각각 0,1 번호를 부여
수신측이 데이터를 받지 못했을 경우 NAK를 보내고, NAK를 받은 송신측은 데이터를 재전송
Go-Back-n-ARQ(GBn)


ACK : 다음 프레임을 전송
NAK : 손상된 프레임 자체 번호를 반환
재전송 되는 경우
1) NAK 프레임을 받았을 경우
- 수신측에서 데이터 1을 받았는데 갑자기 데이터 3을 받게 된다면 데이터 2를 못받은 것이므로 NAK(2)를 보냄
- 수신측은 NAK(2) 이후의 데이터를 모두 폐기함
- GBn ARQ는 NAK(2)을 받아 데이터를 재전송할 때, 2번 데이터만을 재전송하는 것이 아니라 2번 데이터 이후 데이터를 모두 재전송함
2) 타임아웃
- 송신측은 타임아웃동안 ACK 데이터를 받지 못했을 경우 마지막 ACK된 데이터부터 재전송
Selective-Reject(SR) ARQ


1) Client > Server : SYN (서버에 접속 요청).
Client의 상태 : SYN_SENT
2) Server > Client : ACK(서버의 요청 수락) SYN (클라이언트님 포트 열어주세요 요청)
Server의 상태 : SYN-RECEIVED
3) Client > Server : ACK(넵)
Client, Server의 상태 : ESTABLISHED

최초에는 서로 통신 상태이기 때문에 양쪽이 ESTABLISHED의 상태
1) Client > Server : FIN (통신 종료하자). Client의 상태 : FIN_WAIT_1
2) Server > Client : ACK (알겠어)
Server의 상태: CLOSE_WAIT(해당 클라이언트 포트에 연결되어있는 Application에게 close() 요청)
Client의 상태 : FIN_WAIT_2
3) Server > Client : FIN(나도 껐음)
Server의 상태 : LAST_ACK
Application은 최종적으로 close()
4) Client > Server : ACK (응 확인했어)
Server의 상태 : CLOSED
Client의 상태 : TIME_WAIT...CLOSED
어떠한 이유에서 FIN_WAIT_1과 FIN_WAIT_2 상태인 연결이 많이 남아있다면 문제가 발생할 수 있다.
물론 일정 시간이 지나 Time Out이 되면 연결이 자동으로 종료되긴 하지만
이 Time Out이 길어져 많은 수의 소켓이 늘어나게 되면 메모리 부족으로 더 이상 소켓을 오픈하지 못하는 경우가 발생한다.
이 경우는 네트워크나 방화벽 또는 Application에서 close()처리 등에 대한 문제등으로 발생할 수 있으며 원인을 찾기가 쉽지 않다.
이러한 문제 해결을 위해서 FIN_WAIT_1과 FIN_WAIT_2 의 Time Out 시간을 적절히 조절할 필요가 있다.
Connection Timeout : TCP 3-way-handshake(connection) 을 구성하는 데 소요되는 시간의 임계치
Socket Timeout : 각 패킷이 전송될 때 소요되는 시간의 임계치
Socket Timeout : 1초
응답 패킷 : 3개
각 패킷 도착 시각 : 0.9초
총 응답 시간 : 2.7초
위와 같은 상황에서는 Socket Timeout이 발생하지 않는다.
개별 패킷들이 1초 안에 도착하였기 때문이다.

정리하자면 Connection Timeout과 Socket Timeout 설정은 모두 필요하다.
만약 두가지 timeout을 설정하지 않으면 url 접속 시 무한 대기가 발생할 수 있다.

dotted-decimal notation을 이용해 표기한다.(0.0.0.0 ~ 127.255.255.255)(128.0.0.0 ~ 191.255.255.255)(192.0.0.0 ~ 233.255.255.255)직접 인터넷에 연결되지 않고 NAT(Network Address Translation)을 이용해 인터넷에 접속되는 사설망
주소 대역이 3개로 고정되어있음
사용하는 이유
Network Fragmentation이 지속적으로 증가하게되어 라우터에 많은 부담을 주고있어 이를 해결하기위해 IPv6가 새로 설계되었다.
잘보고갑니다 ^^